如何向字典中添加列表值和数量

2024-06-16 11:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个for循环,它将获取一个列表并将其值添加到字典中。例如,假设一个列表包含值:[书,硬币,书,书,计算机,包]。for循环将获取这些值并将其添加到字典中,其键是添加的项的名称,相应的值是项的数量。以下是我目前掌握的代码:

import pprint

def addToInventory(inventory, addedItems):
    for i in addedItems:
        inventory += addedItems.count(i)

def displayInventory(inventory):
    print("Inventory:")
    item_total = 0
    for k, v in inventory.items():
        pprint.pprint(str(v) + ' ' + k)
        item_total += v
    print("Total number of items: " + str(item_total))

stuff = {}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

# while True:
#     item = raw_input('Please enter item name')
#     if item == '':
#         break
#     quantity = input('and the number of this item?')
#     stuff.setdefault(item, quantity)
#     print stuff

stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}

addToInventory(stuff, dragonLoot)
displayInventory(stuff)

Tags: in列表for字典defitemtotalpprint
3条回答

使用^{}

from collections import Counter

def add_to_inventory(inventory, items):
    inventory.update(items)

def display_inventory(inventory):
    print("Inventory:")
    print('\n'.join('{} {}'.format(v, k) for k, v in inventory.items()))
    print("Total number of items: {}".format(sum(inventory.values())))

stuff = Counter({'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12})

dragon_loot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

display_inventory(stuff)
add_to_inventory(stuff, dragon_loot)
display_inventory(stuff)

输出

Inventory:

1 rope

42 gold coin

6 torch

1 dagger

12 arrow

Total number of items: 62

Inventory:

45 gold coin

2 dagger

6 torch

1 rope

12 arrow

1 ruby

Total number of items: 67

我想这就是你要找的。关键是只迭代新列表中的唯一项,并将其添加到现有字典中,或者在该项不存在时更新该项。在

alist = ["Book", "Coin", "Book", "Book", "Computer", "Bag"]
inventory = {"Book":3, "Bag":2}
for item in list(set(alist)): #get the unique items by converting them to a set
    if item in result:
        inventory[item] += alist.count(item) 
    else:
        inventory[item] = alist.count(item)

#inventory would now become {"Book":6, "Coin":1", "Bag":3", "Computer":1}

同时,使用Stefan的方法。 如果库存是一个计数器,你可以这样做

^{pr2}$

您可以使用collection.Counter

>>> alist = ["Book", "Coin", "Book", "Book", "Computer", "Bag"]
>>> inventory = {"Book":3, "Bag":2}
>>> dict(collections.Counter(inventory) + collections.Counter(alist))
{'Bag': 3, 'Book': 6, 'Coin': 1, 'Computer': 1}

相关问题 更多 >