1

假设我有这个:

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

我需要找到 p2 并获得它的值。

4

7 回答 7

2

您可以尝试以下操作...这将返回所有字典中与 givenKey 等效的所有值。

ans = [d[key] for d in list if d.has_key(key)]
于 2012-09-20T22:22:25.043 回答
1
for d in list:
    if d.has_key("p2"):
        return d['p2']
于 2012-09-20T22:18:15.287 回答
1

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

things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])

您可以通过将它们合并来将字典列表转换为一个字典update(但这会覆盖重复的键):

dict = {}
for item in list:
    dict.update(item)
do_something(dict['p2'])

如果这不可能,您只需要遍历它们:

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'])

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

于 2012-09-20T22:18:29.590 回答
1

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

lst = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 = next(d["p2"] for d in lst if "p2" in d)

或者把它们变成字典:

dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]
于 2012-09-20T22:20:41.593 回答
1

你也可以使用这个单行:

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

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

于 2012-09-20T22:24:27.527 回答
1

如果是一次性查找,您可以执行以下操作

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

如果您需要查找多个键,您应该考虑将列表转换为可以在恒定时间内进行键查找的东西(例如字典)

>>> my_list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
>>> my_dict = dict(i.popitem() for i in my_list)
>>> my_dict['p2']
'v2'
于 2012-09-20T22:46:05.937 回答
1

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

{k:v for x in list for k,v in x.iteritems()}['p2']
于 2012-09-20T23:33:48.960 回答