假设我有这个:
list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
我需要找到 p2 并获得它的值。
假设我有这个:
list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
我需要找到 p2 并获得它的值。
您可以尝试以下操作...这将返回所有字典中与 givenKey 等效的所有值。
ans = [d[key] for d in list if d.has_key(key)]
for d in list:
if d.has_key("p2"):
return d['p2']
如果这是您的实际代码的样子(每个键都是唯一的),您应该只使用一个字典:
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'])
另外,我不建议实际命名任何变量dict
or list
,因为这会导致内置dict()
和list()
函数出现问题。
这些不应该存储在列表中,它们应该存储在字典中。但是,由于它们存储在列表中,您可以按原样搜索它们:
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"]
你也可以使用这个单行:
filter(lambda x: 'p2' in x, list)[0]['p2']
如果你有多个“p2”,这将挑选出第一个;如果你没有,它会引发 IndexError。
如果是一次性查找,您可以执行以下操作
>>> [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'
首先将字典列表展平为字典,然后您可以通过键对其进行索引并获取值:
{k:v for x in list for k,v in x.iteritems()}['p2']