2017-04-05 52 views
0
data = { 
    "items" : [{"potion" : 1}, {"potion2" : 1}] 
} 

print(data["items"][0]["potion"]) 

所以,这里是jiz。我想得到potion2而没有提供像[0]这样的号码,但我不能,因为一些变量在列表中有5个项目,而另一个可能有3个项目,因此提供一个号码可能不会给我我需要的。有没有办法获得potion2而不提供该号码?根据变量中的元素键在列表中获取字典的字典

+0

你真的需要一个单条目词典列表吗?这使事情变得更加困难。为什么不只有**“物品”:{“potion”:1,“potion2”:1} **,以便您可以通过名称找回它们? – Prune

回答

0

我假设你不想提供索引,因为硬编码在任何情况下都不起作用。

您可以取出列表中具有该键的任何项目。

建立具有该键的任何项目的列表。它通常可能只有一个,但容器本身并不强制只有一个条目可以拥有该密钥。

之后,您可以迭代列表或检查返回的值是否为空,并只取第一个元素。

>>> data = {'items': [{'potion': 1}, {'potion2': 1}]} 
>>> e = filter(lambda i: 'potion' in i, data['items']) 
>>> for i in e: 
...  print(i['potion']) 
... 
1 

或只拉出第一个元素。我意识到你说没有索引,但是这个索引被应用到过滤列表中,并且我们先检查它不是空的,所以这是一个有效的事情。

>>> if e: 
...  print(e[0]['potion']) 
... 
1 
相关问题