Разделение вложенного словаря - PullRequest
0 голосов
/ 04 мая 2018

У меня есть два словаря. один - это вложенный словарь, а другой - общий словарь. Я хочу сделать несколько делений:

dict1 = {'document1': {'a': 3, 'b': 1, 'c': 5}, 'document2': {'d': 2, 'e': 4}}

dict2 = {'document1': 28, 'document2': 36}

Я хочу использовать внутренние значения словаря из dict1 для деления на значение соответствующего документа в dict2. Ожидаемый результат будет: введите код здесь

dict3 = {'document1': {'a': 3/28, 'b': 1/28, 'c': 5/28}, 'document2': {'d': 2/36, 'e': 4/36}}

Я пытался использовать два цикла for для запуска каждого словаря, но значения будут дублироваться несколько раз, и я не знаю, как это исправить? Кто-нибудь имеет представление о том, как достичь этой цели? Буду признателен за это! ``

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Вы можете достичь этого, используя словарное понимание.

dict3 = {} # create a new dictionary


# iterate dict1 keys, to get value from dict2, which will be used to divide dict 1 values

for d in dict1:
       y  = dict2[d] 
       dict3[d] = {k:(v/y) for k, v in dict1[d].items() }
0 голосов
/ 04 мая 2018

В одну строку, используя вложенные словарные выражения:

dict3 = {doc_key: {k: (v/doc_value) for k, v in dict1[doc_key].items()} for doc_key, doc_value in dict2.items()}
0 голосов
/ 04 мая 2018

Вы можете попробовать следующий код

dict1 = {'document1': {'a': 3, 'b': 1, 'c': 5},
         'document2': {'d': 2, 'e': 4}}

dict2 = {'document1': 28, 'document2': 36}

for k,v in dict1.items():
    for ki,vi in v.items():
        dict1[k][ki] /= dict2[k]
print(dict1)
# output
#{'document1': {'a': 0.10714285714285714, 'b': 0.03571428571428571, 'c': 0.17857142857142858}, 
#'document2': {'d': 0.05555555555555555, 'e': 0.1111111111111111}}
...