python - 关于自动化无聊的东西的问题:第 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”时,这段代码如何允许将列表添加到字典中?
非常感谢。
解决方案
让我们打破addToInventory
函数中的循环。首先我们有
inventory.setdefault(i ,0)
该指令的意思是“如果键i
不在inventory
字典中,请将其设置为0
. 它是 - 在这种情况下(因为我们不使用 的返回值setdefault
) - 相当于
if i not in inventory.keys():
inventory[i] = 0
接下来是这个指令
inventory[i] = inventory[i] + 1
这基本上是一个增量,即inventory
key 的 value加 1 i
。
否则,该for
循环是“对于 中的每个项目addedItems
,如果字典中的相应值inventory
不存在,则将其设置为零,然后将其递增”。
读完这本书后,你可能会从检查 Python 标准库的模块中受益,collections
尤其是它更适合你试图实现的逻辑。defaultdict
Counter
推荐阅读
- javascript - OPTIONS 404 on Vue.js file upload
- zabbix - Zabbix HTTP 代理 0 然后连接失败
- docker - 在 windows docker 容器中运行 exe
- android - android中的onBackPressed更改选项卡
- android - 访问被拒绝无法从 aws s3 下载图像
- ruby-on-rails - 在 Rails 5 上检索请求标头的正确方法是什么?
- splunk - SplunkUF 不转发来自 Kubernetes 容器的日志
- firebase - 使用 Firebase 和 React Native 管理两个数据库
- node.js - 并行执行 AoG 意图
- angular - 无法在 Angular 5 中的孙子组件之间共享 Observable Subject 服务