Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python中列表中的值更新字典_Python_List_Loops_Dictionary - Fatal编程技术网

使用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的操作