我的功能是添加以下项目的两个词典(' item_name':项目数量)。有一个错误,我修复了它,但我不明白它是如何工作的。
这是我的原始代码,它无法正常工作。
inventory = {'rope': 1, 'torch': 5, 'gold': 3000, 'dagger': 1}
loot = {'lock pick': 3, 'potion' : 1, 'lock pick': 4, 'potion' : 1, 'sword': 1}
def addToInventory(inventory, addedItems):
for item, quantity in addedItems.items():
inventory.setdefault(item, 0)
inventory[item] += quantity
addToInventory(inventory, loot)
当战利品中有相同的物品时,它不会将其中一个数量添加到库存中。
以下是有效的代码:
def addToInventory(inventory, addedItems):
for item, quantity in addedItems.items():
inventory.setdefault(item, quantity)
inventory[item] += quantity
addToInventory(inventory, loot)
为什么没有" invertory.setdefault(item,quantity)"重新计算它必须设置默认值的第一项?
答案 0 :(得分:2)
您的loot
词典有重复的键。因此,实际上只有其中一个会被添加到字典中。您应该使用元组列表或类似的东西。
inventory = {'rope': 1, 'torch': 5, 'gold': 3000, 'dagger': 1}
loot = [('lock pick', 3), ('potion', 1), ('lock pick', 4), ('potion', 1),
('sword', 1)]
def addToInventory(inventory, addedItems):
for item, quantity in addedItems:
# This will get the existing value and add quantity to it. If the key
# does not exist, `inventory.get` will use zero
inventory[item] = inventory.get(item, 0) + quantity
addToInventory(inventory, loot)
print(inventory)
<强>输出强>
{'dagger': 1,
'gold': 3000,
'lock pick': 7,
'potion': 2,
'rope': 1,
'sword': 1,
'torch': 5}
答案 1 :(得分:1)
这一行:
loot = {'lock pick': 3, 'potion' : 1, 'lock pick': 4, 'potion' : 1, 'sword': 1}
没有按照您的预期进行,lock pick
的第二个实例会覆盖第一个实例。由于loot
是一个字典,因此每个键只能有一个实例。如果要允许多种类型的战利品实例,请考虑元组列表:
loot = [('lock pick', 3), ('potion', 1), ('lock pick', 4)]
然后你的功能看起来几乎一样:
def addToInventory(inventory, addedItems):
for item, quantity in addedItems:
inventory.setdefault(item, 0)
inventory[item] += quantity
答案 2 :(得分:0)
字典只能为字典中的每个键分配一个值。看起来Python的行为是使用您为每个键提供的后一个值。
>>> loot = {'lock pick': 3, 'potion' : 1, 'lock pick': 4, 'potion' : 1, 'sword': 1}
>>> print(loot)
{'lock pick': 4, 'potion': 1, 'sword': 1}
>>>