Python 如何在字典数组中查找项?

Python 如何在字典数组中查找项?,python,list,dictionary,Python,List,Dictionary,假设我有这个: list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ] 我需要找到p2并获取其值。如果这是实际代码的样子(每个键都是唯一的),您应该只使用一个字典: for d in list: if d.has_key("p2"): return d['p2'] things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' } do_something(things['p2']) dct

假设我有这个:

list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]

我需要找到p2并获取其值。

如果这是实际代码的样子(每个键都是唯一的),您应该只使用一个字典:

for d in list:
    if d.has_key("p2"):
        return d['p2']
things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])
dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]
通过将字典列表与
update
合并,可以将字典列表转换为一个字典(但这将覆盖重复的键):

如果这是不可能的,您只需在它们之间循环:

for item in list:
    if 'p2' in item:
        do_something(item['p2'])
如果您希望得到多个结果,还可以建立一个列表:

p2s = []
for item in list:
    if 'p2' in item:
        p2s.append(item['p2'])

另外,我不建议实际命名任何变量
dict
list
,因为这会导致内置
dict()
list()
函数出现问题。

如果这是实际代码的样子(每个键都是唯一的),那么应该只使用一个字典:

things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])
dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]
通过将字典列表与
update
合并,可以将字典列表转换为一个字典(但这将覆盖重复的键):

如果这是不可能的,您只需在它们之间循环:

for item in list:
    if 'p2' in item:
        do_something(item['p2'])
如果您希望得到多个结果,还可以建立一个列表:

p2s = []
for item in list:
    if 'p2' in item:
        p2s.append(item['p2'])

此外,我不建议实际命名任何变量
dict
list
,因为这会导致内置
dict()
list()
函数出现问题。

这些变量不应该首先存储在列表中,而应该存储在字典中。但是,由于它们存储在列表中,因此您可以按原样搜索它们:

lst = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 = next(d["p2"] for d in lst if "p2" in d)
或者把它们变成字典:

things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])
dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]

首先,这些不应该存储在列表中,而应该存储在字典中。但是,由于它们存储在列表中,因此您可以按原样搜索它们:

lst = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 = next(d["p2"] for d in lst if "p2" in d)
或者把它们变成字典:

things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])
dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]

你可以试试下面的。。。这将返回所有字典中与givenKey相同的所有值

ans = [d[key] for d in list if d.has_key(key)]

你可以试试下面的。。。这将返回所有字典中与givenKey相同的所有值

ans = [d[key] for d in list if d.has_key(key)]

您也可以使用此一行:

filter(lambda x: 'p2' in x, list)[0]['p2']

如果您有多个“p2”,这将挑选出第一个;如果没有,它将引发Indexer。

您也可以使用这一行:

filter(lambda x: 'p2' in x, list)[0]['p2']

如果您有多个“p2”,这将挑选出第一个;如果没有,它将引发Indexer。

如果是一次性查找,您可以这样做

>>> [i['p2'] for i in my_list if 'p2' in i]
['v2']

如果需要查找多个键,则应该考虑将列表转换为可以在恒定时间(例如DICT)

进行关键字查找的内容。
如果是一次性查找,您可以执行以下操作

>>> [i['p2'] for i in my_list if 'p2' in i]
['v2']

如果需要查找多个键,则应该考虑将列表转换为可以在恒定时间(例如DICT)

进行关键字查找的内容。
首先将字典列表展平为一个字典,然后可以按键对其进行索引并获取值:

{k:v for x in list for k,v in x.iteritems()}['p2']

首先将字典列表展平为一个字典,然后可以按键对其进行索引并获取值:

{k:v for x in list for k,v in x.iteritems()}['p2']

你保证列表中只有一个dict有你想要的键吗?是的@Wooble,值“v1”,“v2”。。。字典中的数字总是不同的。你保证列表中只有一个数字有你想要的键吗?是的@Wooble,值“v1”,“v2”。。。haskey应该是has_key,或者更好的是,只是'in',就像d'haskey中的'p2'应该是has_key,或者更好的是,只是'in',就像d'中的'p2'一样,我在这个数组中使用了名称“list”,只是为了这个例子,谢谢你的回答和建议。我在这个数组中使用了名称“list”,只是为了这个例子,谢谢你的回答和建议。你说这些不应该存储在一个列表中,这条评论是针对这个问题的,还是通常是为了避免一系列的口述?如果dict有相同的一组键怎么办?你说过这些键不应该存储在列表中,这条评论是针对这个问题的还是为了避免dict数组?如果dict有相同的一组键呢?