如何在不更改字典大小的情况下将列表项添加到字典

时间:2019-06-28 18:04:49

标签: python python-3.x list dictionary

这段代码是我尝试解决使用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)

0 个答案:

没有答案