首页 > 解决方案 > 关于自动化无聊的东西的问题:第 5 章

问题描述

我是编程新手,目前正在使用 Python 自动化无聊的东西,第 2 版。在第 5 章中,有一个练习题涉及使用字典创建奇幻游戏清单。我已经使用其他人的答案完成了这个问题,但是,我不理解代码的特定部分。

此代码意味着将新的“dragonLoot”列表添加到当前库存,即字典“inv”。这是我的代码:

def displayInventory(inventory):
    print("Inventory:")
    item_total = 0
    for k, v in inventory.items():
         item_total = item_total + v
         print(str(v) + " " + k)
    print("Total number of items: " + str(item_total))

def addToInventory(inventory, addedItems):
    for i in addedItems:
        inventory.setdefault(i, 0)
        inventory[i] = inventory[i] + 1
    return inventory



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

displayInventory(inv)

我的问题与此特定部分有关:

def addToInventory(inventory, addedItems):
for i in addedItems:
    inventory.setdefault(i, 0)
    inventory[i] = inventory[i] + 1
return inventory

当输入“inventory.setdefault(i ,0)”,然后输入“inventory[i] = inventory[i] + 1”时,这段代码如何允许将列表添加到字典中?

非常感谢。

标签: pythondictionary

解决方案


让我们打破addToInventory函数中的循环。首先我们有

inventory.setdefault(i ,0)

该指令的意思是“如果键i不在inventory字典中,请将其设置为0. 它是 - 在这种情况下(因为我们不使用 的返回值setdefault) - 相当于

if i not in inventory.keys():
    inventory[i] = 0

接下来是这个指令

inventory[i] = inventory[i] + 1

这基本上是一个增量inventorykey 的 value加 1 i

否则,该for循环是“对于 中的每个项目addedItems,如果字典中的相应值inventory不存在,则将其设置为零,然后将其递增”。


读完这本书后,你可能会从检查 Python 标准库的模块中受益,collections尤其是它更适合你试图实现的逻辑。defaultdictCounter


推荐阅读