这段代码是我尝试解决使用Python自动完成无聊的事情中的问题。它旨在帮助我了解如何迭代字典和列表。当我的函数遇到列表中的第一项“新”时,在行RuntimeError: dictionary changed size during iteration
处收到错误newInventory['item'] = 1
。
我认为我理解错误:在for循环期间向字典添加新的key:value对时,它将更改字典的大小。有没有一种“干净”的方法来解决这个问题?
我考虑过使用单独的词典来存储“新”项,但是到了将这些词典项添加到inv
的时候了,我会遇到同样的问题吗?
作为循环的一部分,我还考虑了以新的大小“重新加载”字典,但是我不知道怎么做。
在这种情况下,给我添加新条目到字典的最佳方法是什么?
#!/usr/bin/env python3
# addToInventory.py - Keeping track of our inventories
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
def displayInventory(inventory):
print("Inventory:")
itemTotal = 0
for k, v in inventory.items():
print(f'{v} {k}')
itemTotal = itemTotal + v
print("Total number of items: " + str(itemTotal))
def addToInventory(inventory, addedItems):
print(f'Starting inventory:')
print('TK')
for item in dragonLoot:
for k, v in inv.items():
if item == k:
print(f'One {item} added to inventory!')
v = v + 1
elif item not in inv:
print(f'You got your first {item}!')
newInventory['item'] = 1
print('Updated inventory:')
print('TK')
addToInventory(inv, dragonLoot)
displayInventory(inv)