gpt4 book ai didi

Python - 字典比较

转载 作者:行者123 更新时间:2023-11-30 21:59:22 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com