Добавление списка или словаря в словарь с несколькими значениями для одного ключа - Python - PullRequest
0 голосов
/ 04 сентября 2018

Самый первый пост здесь, извинения, если это не правильно. У меня есть 2 словаря с ключами и списками в качестве значений. Мне нужно назначить список элементу списка в словаре, где он соответствует другому словарю 2.

Dictionary 1
{'S': ['Close Coupled', 'Wall Hung', 'Btw'], 'E':['Bifold', 'Hinge', 'Sliding', 'Pivot']}

Dictionary 2
{'Close Coupled': ['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'], 'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'],'Btw': ['BTW Contract', 'BTW Rimless'], 'Bifold': ['700', '800', '900', '1000'], 'Hinge': ['700', '800', '900', '1000'], 'Sliding': ['700', '800', '900', '1000'], 'Pivot': ['700', '800', '900', '1000']} 

Result I am trying to get is.
{'S': {'Close Coupled':['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'], 'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'], 'Btw': ['BTW Contract', 'BTW Rimless'], 'E': 'Bifold':['700', '800', '900', '1000'], 'Hinge':['700', '800', '900', '1000'],'Sliding':['700', '800', '900', '1000'], 'Pivot':['700', '800', '900', '1000']}

После него у меня есть другой словарь, который будет добавлен таким же образом. это похоже на древовидную структуру или вложенное, но я не могу создать свою логику для назначения словаря каждому соответствующему элементу списка в 1-м словаре.

Если не понятно; пожалуйста, дайте мне знать, я постараюсь объяснить это лучше.

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Вы можете использовать dict понимание, чтобы сделать это:

{keys : {m : d2.get(m) for m in values} for keys, values in d1.items()}


{'S': {'Close Coupled': ['Close Coupled Contract',
   'Close Coupled Open Back',
   'Close Coupled Open Back Rimless'],
  'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'],
  'Btw': ['BTW Contract', 'BTW Rimless']},
 'E': {'Bifold': ['700', '800', '900', '1000'],
  'Hinge': ['700', '800', '900', '1000'],
  'Sliding': ['700', '800', '900', '1000'],
  'Pivot': ['700', '800', '900', '1000']}}

ДАННЫЕ:

d1 = {'S': ['Close Coupled', 'Wall Hung', 'Btw'], 'E':['Bifold', 'Hinge', 'Sliding', 'Pivot']}
d2 = {'Close Coupled': ['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'], 'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'],'Btw': ['BTW Contract', 'BTW Rimless'], 'Bifold': ['700', '800', '900', '1000'], 'Hinge': ['700', '800', '900', '1000'], 'Sliding': ['700', '800', '900', '1000'], 'Pivot': ['700', '800', '900', '1000']}
0 голосов
/ 04 сентября 2018

Не думаю, что правильно понял ваш вопрос. Однако проверьте этот код, и, если он не соответствует вашим потребностям, сообщите мне.

d1= {'S': ['Close Coupled', 'Wall Hung', 'Btw'], 'E':['Bifold', 'Hinge', 'Sliding', 'Pivot']}

d2= {'Close Coupled': ['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'], 'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'],'Btw': ['BTW Contract', 'BTW Rimless'], 'Bifold': ['700', '800', '900', '1000'], 'Hinge': ['700', '800', '900', '1000'], 'Sliding': ['700', '800', '900', '1000'], 'Pivot': ['700', '800', '900', '1000']}

final_dict= {} # create a dictionary to store the final answer
for item in d1:
    temp= dict() # temporary dictionary
    for i in item d1[item]:
        temp[i]= d2[i]
    final_dict[item]= temp

выход
печать (final_dict)

{'E': {'Bifold': ['700', '800', '900', '1000'],
  'Hinge': ['700', '800', '900', '1000'],
  'Pivot': ['700', '800', '900', '1000'],
  'Sliding': ['700', '800', '900', '1000']},
 'S': {'Btw': ['BTW Contract', 'BTW Rimless'],
  'Close Coupled': ['Close Coupled Contract',
   'Close Coupled Open Back',
   'Close Coupled Open Back Rimless'],
  'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless']}} `
0 голосов
/ 04 сентября 2018

Один из подходов заключается в циклическом просмотре вашего первого словаря и получении списков, соответствующих ключам с тем же именем, из вашего второго словаря. Например:

d1 = {'S': ['Close Coupled', 'Wall Hung', 'Btw'], 'E':['Bifold', 'Hinge', 'Sliding', 'Pivot']}
d2 = {'Close Coupled': ['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'], 'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless'],'Btw': ['BTW Contract', 'BTW Rimless'], 'Bifold': ['700', '800', '900', '1000'], 'Hinge': ['700', '800', '900', '1000'], 'Sliding': ['700', '800', '900', '1000'], 'Pivot': ['700', '800', '900', '1000']}
result = dict()

for key, values in d1.items():
    result[key] = dict()
    for value in values:
        result[key][value] = d2[value]

print(result)

# OUTPUT (print does not output indented results shown here for readability only)
# {
#      'S': {
#          'Close Coupled': ['Close Coupled Contract', 'Close Coupled Open Back', 'Close Coupled Open Back Rimless'],
#          'Btw': ['BTW Contract', 'BTW Rimless'],
#          'Wall Hung': ['Wall Hung Contract', 'Wall Hung Rimless']
#          },
#      'E': {
#          'Bifold': ['700', '800', '900', '1000'],
#          'Hinge': ['700', '800', '900', '1000'],
#          'Sliding': ['700', '800', '900', '1000'],
#          'Pivot': ['700', '800', '900', '1000']
#          }
# }
...