基于python键的查找字典

时间:2017-11-05 08:25:03

标签: python list dictionary

我有一个字典列表:

mylist1 = [{'model': 'one'}, {'color': 'blue'}, {'age': 23}]

有没有办法可以根据密钥查找字典?对于我想要做的事情(伪代码):

mylist1['model'] #should return {'model': 'one'}

我没有做mylist[0]['model']的原因是因为列表元素并不总是按顺序排列。有人可以帮忙吗?

提前致谢!

4 个答案:

答案 0 :(得分:3)

你提供的伪代码是不可能的,除非你是子类(或猴子补丁)list(否则你会得到一个错误,列表索引必须是整数而不是字符串)。

但是你可以写一个像

这样的函数
def find(li, key):
    for d in li:
        if key in d:
            return d

它将查找并返回包含给定键的第一个字典,并且如果键不唯一,可以轻松修改以返回字典列表。

看起来你正在使用字典错误。为什么你有一个字典列表,每个字典都有(显然)唯一的键,而不是一个字典?

答案 1 :(得分:3)

折叠字典。

d = {k : v for d in mylist1 for k, v in d.items()}

d
{'age': 23, 'color': 'blue', 'model': 'one'}

现在,只需查询常量O(1)时间。

d['model']
'one'

通过在同一个列表中保留多个不相交的dict,您首先会打败他们的目的。

如果您有多个可能的值使用相同的键,请使用dict list s。

d = {}
for dct in mylist1:
    for k, v in dct.items():
        d.setdefault(k, []).append(v)

d
{'age': [23], 'color': ['blue'], 'model': ['one']}

使用相同的键支持多个值而不覆盖条目,就像之前的那样。

答案 2 :(得分:1)

使用x[(a,b)] ,找到包含该list comprehension的{​​{1}}中的所有dictionaries

list

注意OP:正如其他人所指出的那样,其中有一个字典列表是多余的; 除非您的词典包含重复的

答案 3 :(得分:1)

key = "model"
d = [ x for x in mylist if key in x ]

如果你只想要一场比赛:

key = "model"
d = next( x for x in mylist if key in x )

第二个使用生成器,所以它只找到第一个匹配然后停止。