繁体   English   中英

Python - 字典比较

[英]Python - dictionaries comparision

我在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

该代码也可以在Pastebin上使用

在你的for循环中,仔细看看使用jelse stuite:

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使用key in dictionary ; 如果您可以从该字典中获取该键的值,则为true。

这意味着您不需要遍历两个字典,只需使用其中一个键来查看另一个字段中是否有数字:

for item, count in dictionaryHelp.items():
    if item in inventory:
        inventory[item] = inventory[item] + count
    else:
        inventory[item] = count
  • 不再需要复制inventory ,因为您现在没有对其进行循环。
  • 您可以使用dict.get()来代替测试item in inventory中的item in inventory而不是使用默认的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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM