使用Python中列表中的值更新字典
我这里有一本字典:使用Python中列表中的值更新字典,python,list,loops,dictionary,Python,List,Loops,Dictionary,我这里有一本字典: 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,
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}
我在这里遗漏了什么?如果字典支持随机查找,则无需对其进行迭代。您可以使用dict中的x来执行此操作。此外,您需要循环外的
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}
如图所示,您可以使用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}
如果我在dic中:是否优于
如果dic.get(i):
?@ScottBoston按分数计算。因为dic.get(i)
会导致函数调用,然后对返回值进行求值<代码>如果我在dic中应该更快。一行:dic[i]=dic.get(i,0)+1
@cᴏʟᴅsᴘᴇᴇᴅ 我的错,返回语句在循环之外,如果dic.get(i):的输入错误也会使你的任何键出错。例如,如果dic[i]
为0,则此测试的作用与i
不在dic
中时相同。如果您想使用一种奇特的dict方法,您可以执行类似于dic[i]=dic.get(i,0)+1的操作