繁体   English   中英

使用python 3.x中最简单的代码将字典添加到字典中

[英]Adding a list to a dictionary with the simplest code in python 3.x

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循环位。 我现在觉得很奇怪(太长了)。 谢谢!

你真的应该使用一个Counter ,这是内置字典的子类。

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

  • 添加两个Counter实例(即两个库存在一起)非常容易。
  • 更新Counter非常容易。
  • 当您查找清单中没有的任何项目时, Counter将自动返回0。

演示:

>>> 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

你可以看起来像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM