将列表中的项添加到Python中的字典中

时间:2017-02-10 09:41:21

标签: python

我目前正在进行第二次练习。 https://automatetheboringstuff.com/chapter5(“为幻想游戏库存列出字典功能”)

任务是将列表中的项添加到字典中。

出于某些奇怪的原因,我的for循环没有遍历整个列表。你能帮我理解原因吗?

def addToInventory(inventory, addedItems):
    for i in addedItems:
        if i in inventory:
            inventory[i] = inventory[i] + 1
        else:
            inventory[i] = 1
        return inventory

inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
print(inv)

当我运行此代码时,结果为“{'rope':1,'gold coin':43}” 因此,金币钥匙的价值增加1(不应该增加3),并且忽略'匕首'和'红宝石'。

我在其他地方找到了一个可行的解决方案,但我真的很想知道为什么这段代码不起作用。

提前致谢。

2 个答案:

答案 0 :(得分:2)

def addToInventory(inventory, addedItems):
    for i in addedItems:
        if i in inventory:
            inventory[i] = inventory[i] + 1
        else:
            inventory[i] = 1
    return inventory

return之后的for,而不是if之后。)

答案 1 :(得分:0)

问题是简单的缩进错字。现在,如果我们尝试编写更高效/ pythonic代码,我们可以使用collections.Counter这是一个专门的字典类型来计算项目。您的代码可以缩短和优化:

from collections import Counter

inv = Counter({'gold coin': 42, 'rope': 1})

inv.update(['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby'])

print(inv)

结果:

Counter({'gold coin': 45, 'rope': 1, 'dagger': 1, 'ruby': 1})