Python-字典比较

时间:2019-02-09 12:10:36

标签: python python-3.x function dictionary comparison

我在python中有字典比较问题。我有2个字典,我想比较它们,并且当键相同时,值将升级为select [1st], max(iif([2nd] = 1, [3rd], null)) / max(iif([2nd] = 2, [3rd], null)) as [2nd], max(iif([2nd] = 2, [3rd], null)) / max(iif([2nd] = 3, [3rd], null)) as [3rd] from t group by [1st];

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

这是函数的问题:

valueFromFirstDictionary + valueFromSecondDictionary

代码也是available on Pastebin

1 个答案:

答案 0 :(得分:3)

在您的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 ,只需替换该结果即可。

但是,您不需要使用双循环。字典在测试给定键是否为 great 时,只需使用key in dictionary;如果您可以从该字典中获取该键的值,则为true。

这意味着您不需要遍历两个字典,只需使用其中一个的键来查看另一个字典中是否存在编号:

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