我有一个字典列表,例如我给定的键值是'jerry'。如何获得Python中的字典列表中的给定值的字典?
有没有办法循环访问列表并只返回密钥值为'jerry'的字典?
lst= [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
它应该返回
{'name':'jerry','score':10}
我有一个字典列表,例如我给定的键值是'jerry'。如何获得Python中的字典列表中的给定值的字典?
有没有办法循环访问列表并只返回密钥值为'jerry'的字典?
lst= [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
它应该返回
{'name':'jerry','score':10}
你可以得到一台发电机表达的所有合适的元素和挑头与next
:
next(d for d in lst if d['name'] == 'jerry')
列表理解应该工作:
lst = [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
print([d for d in lst if d['name'] == 'jerry'][0])
使用列表理解:
result = [x for x in lst if x['name'] == 'jerry'][0]
作为一个侧面说明,你可能想使用你的数据namedtuple
如果你打算有很多相似结构的字典,你不希望他们发生变异:
Person = collections.namedtuple('Person', 'name score')
lst = [Person('jerry', 10), ...]
result = [x for x in lst if x.name == 'jerry'][0]
请注意,您还可以使用filter方法
lst = [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
filter(lambda x: x.get('name') == 'jerry', lst)
或创建拉姆达:
getUserDataByName = lambda userName: filter(lambda x: x.get('name') == userName, lst)
OR:
getData = lambda propName, propVal: filter(lambda x: x.get(propName) == propVal, lst)
'd.get( '名')'是更好,如果钥匙可能会丢失 –