我有一个列表和一本字典,我想最终找到两者中的值的总和。例如,我希望下面的代码返回:
{gold coin : 45, rope : 1, dagger : 6, ruby : 1}
首先,我使用一个函数将dragonLoot列表转换为字典然后运行一个Counter来将两个字典一起添加。但是,当我运行代码时,我得到以下内容:
{'ruby': 1, 'gold coin': 3, 'dagger': 1}
Counter({'gold coin': 42, 'dagger': 5, 'rope': 1})
由于某种原因,看起来Counter似乎没有识别我从dragonLoot创建的字典。有没有人对我做错了什么有任何建议?谢谢!
inv = {'gold coin' : 42, 'rope' : 1, 'dagger' : 5}
dragonLoot = ['gold coin','dagger','gold coin','gold coin','ruby']
def inventory(item):
count = {}
for x in range(len(item)):
count.setdefault(item[x],0)
count[item[x]] = count[item[x]] + 1
print(count)
inv2 = inventory(dragonLoot)
from collections import Counter
dicts = [inv,inv2]
c = Counter()
for d in dicts:
c.update(d)
print(c)
答案 0 :(得分:1)
您没有在库存方法中返回计数:
def inventory(item):
count = {}
for x in range(len(item)):
count.setdefault(item[x],0)
count[item[x]] = count[item[x]] + 1
print(count)
您只是打印您的库存计算。将该打印更改为返回,或在打印后添加返回行:
def inventory(item):
count = {}
for x in range(len(item)):
count.setdefault(item[x],0)
count[item[x]] = count[item[x]] + 1
print(count)
return count
将它添加到您的代码并运行它,给出了这个输出:
Counter({'gold coin': 45, 'dagger': 6, 'rope': 1, 'ruby': 1})
或者,@ nneonneo提供的实现是最佳的。
答案 1 :(得分:1)
您不需要inventory
功能:Counter
会为您计算迭代次数。您还可以将+
与Counter
一起使用。结合这些,你可以做很简单的
inv = Counter({'gold coin' : 42, 'rope' : 1, 'dagger' : 5})
dragonLoot = ['gold coin','dagger','gold coin','gold coin','ruby']
inv += Counter(dragonLoot)
运行此操作后,inv
将根据需要Counter({'gold coin': 45, 'dagger': 6, 'rope': 1, 'ruby': 1})
。
答案 2 :(得分:0)
如果没有Counter
:
dragonLoot = ['gold coin','dagger','gold coin','gold coin','ruby']
inv = {'gold coin' : 42, 'rope' : 1, 'dagger' : 5}
for i in dragonLoot:
inv[i] = inv.get(i, 0) +1
print (inv)
输出:
{'gold coin': 45, 'rope': 1, 'dagger': 6, 'ruby': 1}