[英]How to add list items to a dictionary?
我想写一个名为addToInventory(inventory, addedItems)
的 function ,其中 inventory 参数是一个字典,表示玩家的库存“东西”, addedItems 参数是一个类似于 dragonLoot 的列表。
function 应该将列表中的项目添加到玩家库存中。
stuff = {'rope':1, 'torch':6, 'gold coins':42, 'dagger':1, 'arrow':12}
dragonLoot = ['gold coins', 'dagger', 'gold coins', 'gold coins', 'ruby']
def addToInventory(inventory, addedItems):
for n in range(0, len(addedItems)):
new_inv = inventory.copy()
for k, v in (new_inv.items()):
if k == addedItems[n]:
v += 1
else:
new_inv[str(addedItems[n])] = 1
def displayInventory(inventory):
print("Inventory:")
item_total = 0
for key, value in inventory.items():
print(str(value) + ' ' + key)
item_total += v
print("Total number of itmes: " + str(item_total))
stuff = addToInventory(stuff, dragonLoot)
displayInventory(stuff)
但是这个节目:
Traceback (most recent call last):
File "C:/Users/admin/AppData/Local/Programs/Python/Python38/Automate the boring stuff with python/testdict.py", line 21, in <module>
stuff = addToInventory(stuff, dragonLoot)
File "C:/Users/admin/AppData/Local/Programs/Python/Python38/Automate the boring stuff with python/testdict.py", line 8, in addToInventory
for k, v in (new_inv.items()):
RuntimeError: dictionary changed size during iteration
PS:我是编程新手,所以有人也可以详细解释我缺少什么或出了什么问题。 谢谢
你可以使用collections.Counter
来保存你的stuff
:
from collections import Counter
stuff = Counter({'rope':1, 'torch':6, 'gold coins':42, 'dagger':1, 'arrow':12})
dragonLoot = ['gold coins', 'dagger', 'gold coins', 'gold coins', 'ruby']
def addToInventory(inventory, addedItems):
return inventory + Counter(dragonLoot)
stuff = addToInventory(stuff, dragonLoot)
print(stuff)
output:
Counter({'rope': 1,
'torch': 6,
'gold coins': 45,
'dagger': 2,
'arrow': 12,
'ruby': 1})
如果您不想使用collections.Counter
模块,您可以使用:
def addToInventory(inventory, addedItems):
for item in addedItems:
inventory[item] = inventory.get(item, 0) + 1
return inventory
stuff = addToInventory(stuff, dragonLoot)
output:
{'rope': 1, 'torch': 6, 'gold coins': 45, 'dagger': 2, 'arrow': 12, 'ruby': 1}
不使用collections
的替代解决方案:
stuff = {'rope':1, 'torch':6, 'gold coins':42, 'dagger':1, 'arrow':12}
dragon_loot = ['gold coins', 'dagger', 'gold coins', 'gold coins', 'ruby']
def add_to_inventory(inventory, added_items):
inventory_keys = inventory.keys()
for i in added_items:
if i in inventory_keys:
inventory[i] +=1
else:
inventory[i] = 1
return inventory
add_to_inventory(stuff, dragon_loot)
也许是最简单的解决方案,但它有效:
def addToInventory(inventory, added_items):
for i in added_items:
if i not in inventory:
inventory.setdefault(i, 1)
else:
inventory[i] += 1
return inventory
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.