Как обьеденить два словаря и подсчитать, сколько каждого ключа?
Нужно объединить два ключа в один и посчитать сумму. Один код не работает, а другой странно работает:
stuff = {'cold coin': 42, 'rupe': 1, 'dagger': 1, 'sword': 1}
dragonLoot = {'cold coin': 3, 'robe': 1, 'sword': 1}
print('Inventory')
def addToInventory(inventory, addedItem):
for k, v in inventory.items():
if k == k in addedItem.items():
allValue = v.inventory + v.addedItem
print(k + ' ' + str(allValue))
addToInventory(stuff, dragonLoot)
он, к сожалению, не работает...
def addToInventory(inventory, addedItem):
for k, v in inventory.items():
if k == k in addedItem:
total = v + v
print(k + ' ' + str(total))
elif k not in inventory:
print(k + ' ' + str(v))
else:
print(k + ' ' + str(v))
addToInventory(stuff, dragonLoot)
Этот выводит не сумму ключей с 2 словарей, а если ключи сходяться, то он сумирует количество с 1 словаря
PS И еще один вопрос: возможно ли обьеденить, если записать например:
dragonLoot = {'cold coin', 'cold coin', 'cold coin', 'robe', 'sword'}
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Это очень странная конструкция:
if k == k in addedItem.items():
Вы там скорее всего хотите проверить что-то такое:
if k in addedItem: # короткий вариант для if k in addedItem.keys() в Python3
Автор решения: Jack_oS
→ Ссылка
Для объединения словарей с подсчетом можно воспользоваться методом Counter из collections:
from collections import Counter
Для вашего случая:
stuff = {'cold coin': 42, 'rupe': 1, 'dagger': 1, 'sword': 1}
dragon_loot = {'cold coin': 3, 'robe': 1, 'sword': 1}
new_stuff = Counter(stuff) + Counter(dragon_loot)
print(new_stuff)
В результате получите объект Counter:
Counter({'cold coin': 45, 'sword': 2, 'rupe': 1, 'dagger': 1, 'robe': 1})
который можно перевести снова в словарь:
new_stuff_dict = dict(new_stuff)
print(new_stuff_dict)
код выведет:
{'cold coin': 45, 'rupe': 1, 'dagger': 1, 'sword': 2, 'robe': 1}
ps в функции:
def stuff_count(stuff, loot):
from collections import Counter
new_stuff = Counter(stuff) + Counter(loot)
return dict(new_stuff)