如何使用列表中的值来设置dict中的新值?

时间:2016-11-09 11:02:45

标签: python-3.x

我有一个词典:

inv = {"rope" : 1, "torch" : 6, "gold_coin" : 42, "dagger" : 1, "arrow" : 12}

和一个清单:

list = ["gold_coin", "dagger", "gold_coin", "gold_coin", "ruby"]

如何编写一个使用列表中的值来设置inv dict中的新值的函数来获取此值:

inv = {"rope" : 1, "torch" : 6, "gold_coin" : 45, "dagger" : 2, "arrow" : 12, "ruby" : 1}

1 个答案:

答案 0 :(得分:1)

我会做那样的事情:

inv = {"rope" : 1, "torch" : 6, "gold_coin" : 42, "dagger" : 1, "arrow" : 12}
list = ["gold_coin", "dagger", "gold_coin", "gold_coin", "ruby"]
for elem in list:
    inv[elem] = inv.setdefault(elem, 0) + 1
  

{'箭头':12,'匕首':2,' gold_coin':45,' rope':1,&# 39;红宝石':1,'火炬':6}

注意:你不能使用像list这样的关键字作为变量名。更好的变量名称将是inv => inventory和list =>项目

说明

我们可以在几个方面将你的问题分开:

  1. 检查清单中是否存在该项目。
  2. 如果没有,请在您的广告资源中创建一个值为0的密钥。(这是 setdefault 所做的)。
  3. 增加相应项目的计数器。
  4. 首先,我们使用for循环遍历要添加的项列表。然后我们使用内置方法setdefault of dictionary。它需要检查dict键,如果键不存在则分配默认值,并返回值(默认值为1或inv[key])。最后,我们将库存中的项目计数器增加一个。

    setdefault示例

    inv.setdefault("rope", 0)
    

    不会创造"绳索" key并返回1,因为该键已存在于inv字典中。

    inv.setdefault("new_key", None)
    

    创建密钥" new_key"如果没有值,则返回None,因为" new_key"在inv字典中不存在。

      

    INV   {"绳" :1,"火炬" :6," gold_coin" :42,"匕首" :1,"箭头" :12," new_key":无}`