Python - 字典比较

标签 python python-3.x function dictionary comparison

我在 python 中遇到字典比较问题。我有 2 个字典,我想比较它们,当键相同时,值会升级为 valueFromFirstDictionary + valueFromSecondDictionary

函数“addToInventory()”应该有 45 个硬币而不是 3 个,但问题出在哪里?在循环中,它打印 45,但是当我打印所有字典时,它显示 3。

这是函数的问题:

def addToInventory(inventory, addedItems):
    dictionaryHelp = {}

    for i in addedItems:                                 
        dictionaryHelp.setdefault(i,0)
        dictionaryHelp[i] = dictionaryHelp[i] + 1

    for i, k in inventory.copy().items():
        for j, l in dictionaryHelp.items():
            #print(i, k, j, l)
            if i == j:
                suma = k + l
                inventory.update({i:suma})
                #inventory[i] = suma
                print(inventory[i])
                break
            else:
                inventory[j] = l

    print(inventory)
    return(inventory)

inv = {'golden coin': 42, 'rope': 1}
dragonLoot = ['golden coin', 'dagger','golden coin', 'golden coin', 'ruby']
inv = addToInventory(inv, dragonLoot)

for k, v in inv.items():
    print(str(k) + ': ' + str(v))
    item_total = item_total + v

代码也是available on Pastebin .

最佳答案

在您的 for 中循环,仔细看看else Stuite,您在哪里使用 j :

for i, k in inventory.copy().items():
    for j, l in dictionaryHelp.items():
        if i == j:
            # ...
        else:
            inventory[j] = l

您循环遍历 inventory() 的键,对于每个键,您可以循环 dictionaryHelp.items() 。每次i == j 为真,您设置 inventory[j] = l 。你设置'golden coin'并不重要。在某个时刻变为 45,您只需替换该结果即可。

但是,您不需要使用双循环。字典非常适​​合测试给定的键是否已经存在,只需使用 key in dictionary ;如果您可以从该字典中获取该键的值,那就是真的。

这意味着您不需要循环遍历两个字典,只需使用一个字典中的键来查看另一个字典中是否有该项目的数字:

for item, count in dictionaryHelp.items():
    if item in inventory:
        inventory[item] = inventory[item] + count
    else:
        inventory[item] = count
  • 无需复制inventory不再这样了,因为你现在不再循环它。
  • 而不是测试 item in inventory ,您可以使用 dict.get() 使用默认 0值代替:

    for item, count in dictionaryHelp.items():
        inventory[item] = inventory.get(item, 0) + count
    

    dict.get()类似于使用 dict.setdefault() ,但不将字典中的键设置为默认值。

  • 您实际上并不需要创建 dictionaryHelp任何一个。只需将计数直接添加到您的 inventory 中即可字典。我正在使用相同的 dict.get()这里的技巧是从 0 开始如果库存中尚不存在添加的商品:

    def addToInventory(inventory, addedItems):
        for item in addedItems:
            inventory[item] = inventory.get(item, 0) + 1
        return inventory
    

关于Python - 字典比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54606075/

相关文章:

function - 我什么时候必须将我的方法视为 Scala 中的部分应用函数?

python - 无法使用 pandas 0.17.1 附加数据帧,但可以使用 pandas 0.14.1

python - 如何用python替换字符串中的字符串?

function - 元组函数的 Scala 返回类型

python - 属性错误: 'NoneType' object has no attribute 'dtype'

python - 批处理文件中的空白并搁置保存在不同的目录中

javascript - 在 javascript 中,为什么 Array.constructor 指向函数?

python - python -m unittest 执行什么功能?

python - 在 Django 模板中的元组列表的第一个元素中访问元组的第三项

python - 使用 gdal 打开 geotiff 会产生 AttributeError : __exit__