Умножьте значения из двух словарей, но пара ключей и значений не существует в одном словаре - PullRequest
0 голосов
/ 25 мая 2018

У меня есть следующие словари, которые нужно умножить:

dict1 = {'fred': 2, 'andrew': 2, 'judy': 1, 'george': 1}
dict2 = {'andrew': 4, 'fred': 2, 'judy': 2, 'george': 1, 'john': 1}

Я использую

count = {k: dict1[k]*dict2[k] for k in dict1}

Это дает мне вывод:

{'fred': 4, 'andrew': 8, 'judy': 2, 'george': 1}

Потому чтоДжон не включен в dict1, но мне нужно, чтобы «Джон» имел значение «0», возможно ли это?

Как я могу сделать это как:

count = {'fred': 4, 'andrew': 8, 'judy': 2, 'george': 1, 'john': 0}

Ответы [ 2 ]

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

Вот код одной строки:

dict1 = {'fred': 2, 'andrew': 2, 'judy': 1, 'george': 1}
dict2 = {'andrew': 4, 'fred': 2, 'judy': 2, 'george': 1, 'john': 1}

# old code
print({k: dict1[k]*dict2[k] for k in dict1})
{'andrew': 8, 'george': 1, 'judy': 2, 'fred': 4}

# new code with if-else inside dictionary comprehension
print({k: dict1[k]*dict2[k] if k in dict1.keys() and dict2.keys() else 0 for k in dict2})
# output
{'john': 0, 'andrew': 8, 'george': 1, 'judy': 2, 'fred': 4}
0 голосов
/ 25 мая 2018

Используйте dict.get и объединение ключей словаря:

count = {k: dict1.get(k, 0) * dict2.get(k, 0) for k in dict1.keys() | dict2.keys()}

dict.get допускает необязательный параметр по умолчанию, который используется, если ключ не найден в словаре.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...