Tengo una lista de diccionario, por ejemplo, mi valor clave dado es 'jerry'.

¿Hay alguna manera de recorrer la lista y devolver solo el diccionario con el nombre del valor clave de 'jerry'?

lst= [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]

Debería volver

{'name':'jerry','score':10}
0
unice 6 jul. 2011 a las 06:07

4 respuestas

La mejor respuesta

Puede obtener todos los elementos adecuados con una expresión generadora y elegir el primero con next:

next(d for d in lst if d['name'] == 'jerry')
5
Jochen Ritzel 6 jul. 2011 a las 02:12

Una lista de comprensión debería funcionar:

lst = [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
print([d for d in lst if d['name'] == 'jerry'][0])
1
MRAB 6 jul. 2011 a las 02:11

Tenga en cuenta que también puede usar el método filter

lst = [{'name':'tom','score':5},{'name':'jerry','score':10},{'name':'jason','score':8}]
filter(lambda x: x.get('name') == 'jerry', lst)

O cree lambda:

getUserDataByName = lambda userName: filter(lambda x: x.get('name') == userName, lst)

O:

getData = lambda propName, propVal: filter(lambda x: x.get(propName) == propVal, lst)
0
Artsiom Rudzenka 6 jul. 2011 a las 05:04

Use una lista de comprensión:

result = [x for x in lst if x['name'] == 'jerry'][0]

Como nota al margen, es posible que desee utilizar un namedtuple para sus datos si va a tener muchos diccionarios estructurados de manera similar y no desea mutarlos:

Person = collections.namedtuple('Person', 'name score')
lst = [Person('jerry', 10), ...]
result = [x for x in lst if x.name == 'jerry'][0] 
3
li.davidm 6 jul. 2011 a las 02:12