使用python 3.x中最简单的代码向字典添加列表

使用python 3.x中最简单的代码向字典添加列表,python,dictionary,Python,Dictionary,inventory参数是一个表示玩家库存的字典,addedItems参数是一个列表。addToInventory()函数应返回表示已更新库存的字典。程序应输出以下内容: Inventory: 45 gold coin 1 rope 1 ruby 1 dagger Total number of items: 48 这是我的密码: def addToInventory(inventory, addedItems): print('Inventory:') totalItem

inventory参数是一个表示玩家库存的字典,addedItems参数是一个列表。addToInventory()函数应返回表示已更新库存的字典。程序应输出以下内容:

Inventory:

45 gold coin
1 rope
1 ruby
1 dagger

Total number of items: 48
这是我的密码:

def addToInventory(inventory, addedItems):
    print('Inventory:')
    totalItem = 0
    for i in range(len(addedItems)):
        if addedItems[i] in inventory:
        inventory[str(addedItems[i])] += 1
    if addedItems[i] not in inventory:
        inventory[str(addedItems[i])] = 1
    for k, v in inventory.items():
        print(str(v) + ' ' + k)
        totalItem += int(v)

    print('Total number of items:' + str(totalItem))

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

我想知道如何处理for循环位。我现在觉得很奇怪(而且时间太长了)。谢谢

您可以让它看起来像这样:

for i in range(len(addedItems)):
    inventory[i] = inventory.get(i, 0) + 1

为此,您确实应该使用
计数器
,它是内置字典的子类

对于您的用例,它有三个优点:

  • 添加两个
    计数器
    实例(即两个库存一起)非常容易
  • 更新
    计数器
    非常容易
  • 当您查找任何不在库存中的项目时,
    计数器将自动返回0
演示:


首先,您可以将第二个
if
更改为
else
。你不需要重新检查
addedItems[i]
是否在
库存中
@Joey你让它工作了吗?@zondo也改变了它。@timgeb是的,它工作了!哇!我刚刚学习Python大约一周,但我从未了解所有这些子类。有没有办法系统地学习所有这些知识?阅读官方文件?@Joey如果你真的想系统地学习标准库,你必须阅读David Beazley的《Python基本参考》这样的参考资料,这本书可能有点枯燥无味。通过不断地改进自己的代码,您将学到很多常用的类。当你在寻找某个特定的东西时,抓取一个参考资料,或者只是不时地浏览一下。好的,现在就开始做:)你帮了大忙。谢谢
>>> from collections import Counter
>>> inventory = Counter({'gold': 45,
...                      'rope': 1,
...                      'ruby': 1,
...                      'dagger': 1}
... )
>>> 
>>> def addToInventory(inventory, addedItems):
...     inventory.update(addedItems)
... 
>>> addToInventory(inventory, ['gold', 'gold', 'gold', 'dagger'])
>>> inventory
Counter({'gold': 48, 'dagger': 2, 'rope': 1, 'ruby': 1})
>>> addToInventory(inventory, {'ruby':100})
>>> inventory
Counter({'ruby': 101, 'gold': 48, 'dagger': 2, 'rope': 1})
>>> inventory['gold']
48
>>> inventory['flux capacitor']
0