python - 使用 Python 中列表中的值更新字典

标签 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, '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/

相关文章:

python - 当我们在 odoo server 或 openerp 中有多个请求时,响应时间会延迟?

python - 如何更改 flask 命令使用的主机和端口?

javascript - 为什么函数外的数组变量会导致我的 JavaScript 列表应用出现问题?

java - 如何在java中迭代每个第二个元素

r - 如何使用带有 for 循环的粘贴?

python - 将多列分组为键 :value dicts in pandas

python - 将url保存为python中的文件名

css - 为什么我的 <ul> 不是从我的 <div> 继承的?

python - 我将如何消除间距,换行符为我的列表 python 中的每个字符串都有一个空格分隔的字符串

java - while 对于迭代器 hashmap