是否有合理的方法在不导入库的情况下添加到字典值?

时间:2015-07-31 06:00:57

标签: python python-3.x dictionary

我正在处理一个练习问题,用户将库存保存为字典,例如:

inventory = {
    'rope': 1,
    'gold coin': 42,
    }

然后,我需要通过稍后在库存中添加“抢劫”来修改它。

例如:

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

我最终在Countercollections使用def add_to_inventory(original_inventory, added_items): new_inventory = Counter(original_inventory) + Counter(added_items) return(new_inventory) inventory = add_to_inventory(inventory, loot) 就可以轻松完成此操作:

45: gold coin
1: rope
1: ruby
1: dagger

结果是:

#1 file.coffee
#2 file.js.coffee

哪一切都很好,但我想知道.. 有没有合理的方法来解决这个问题而不必导入库?

3 个答案:

答案 0 :(得分:5)

您只需使用dict的{​​{1}}方法:

get

输出:

inventory = {'rope': 1, 'gold coin': 42,}
loot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

for k in loot:
    inventory[k] = inventory.get(k, 0) + 1

print inventory

答案 1 :(得分:3)

您可以简单地遍历清单和增量密钥(如果存在),或者使用EAFP方法将值启动为1:

for l in loot:
    try:
        inventory[l] += 1
    except KeyError:
        inventory[l] = 1



在您谈论替代方案时,collections模块中还有defaultdict对象非常有用:

from collections import defaultdict

inventory = defaultdict(int)
for l in loot:
    inventory[l] += 1

答案 2 :(得分:3)

Delgan给出的答案相同,但我们可以使用setdefault来初始化

def add_to_inventory(inventory, loot):
    for l in loot:
        inventory[l] = inventory.setdefault(l, 0) + 1