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