我这里有一本字典:
dic = {'A':1, 'B':6, 'C':42, 'D':1, 'E':12}
这里有一个列表:
lis = ['C', 'D', 'C', 'C', 'F']
我想做的是(也是作业的要求)检查 lis 中的值是否与 dic 中的键匹配,如果匹配则加 1(例如 lis 中有 3 个 'C)那么 dic 'C' 的输出应该是 45)。如果没有,那么我们在 dic 中创建一个新项目并将值设置为 1。
因此示例输出应如下所示:
dic = {'A':1, 'B':6, 'C':45, 'D':2, 'E':12, 'F':1}
这是我的代码:
def addToInventory(dic, lis):
for k,v in dic.items():
for i in lis:
if i == k:
dic[k] += 1
else:
dic[i] = 1
return dic
并通过以下代码执行:
dic = addToInventory(dic,lis)
它编译没有错误,但输出很奇怪,它将丢失的 F 添加到 dic 中,但没有正确更新值。
dic = {'A':1, 'B':6, 'C':1, 'D':1, 'E':12, 'F':1}
我在这里缺少什么?
最佳答案
当字典支持随机查找时,无需迭代字典。您可以使用 if x in dict
来执行此操作。此外,您需要在循环之外使用 return
语句。
尝试一下:
def addToInventory(dic, lis):
for i in lis:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
return dic
out = addToInventory(dic, lis)
print(out)
{'A': 1, 'B': 6, 'C': 45, 'D': 2, 'E': 12, 'F': 1}
如Harvey suggested ,您可以通过使用 dict.get 来稍微缩短该函数。
def addToInventory(dic, lis):
for i in lis:
dic[i] = dic.get(i, 0) + 1
return dic
dic.get 函数采用两个参数 - 键和要传递的默认值(如果与该键关联的值尚不存在)。
如果您的教授允许使用库,您可以使用collections.Counter
数据结构,它正是用于计数。
from collections import Counter
c = Counter(dic)
for i in lis:
c[i] += 1
print(dict(c))
{'A': 1, 'B': 6, 'C': 45, 'D': 2, 'E': 12, 'F': 1}
关于python - 使用 Python 中列表中的值更新字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46020065/