En Python, a veces necesitamos obtener solo una parte del diccionario necesario para resolver el problema. Este problema es bastante común en el desarrollo web y requerimos obtener solo el diccionario selectivo que satisfaga algunos criterios dados. Analicemos ciertas formas en que se puede resolver este problema.
Método #1: Usar la comprensión de listas
# Python3 code to demonstrate # filtering of a list of dictionary # on basis of condition # initialising list of dictionary ini_list = [{'a':1, 'b':3, 'c':7}, {'a':3, 'b':8, 'c':17}, {'a':78, 'b':12, 'c':13}, {'a':2, 'b':2, 'c':2}] # printing initial list of dictionary print ("initial_list", str(ini_list)) # code to filter list # where c is greater than 10 res = [d for d in ini_list if d['c'] > 10] # printing result print ("resultant_list", str(res))
Producción:
lista_inicial [{‘c’: 7, ‘b’: 3, ‘a’: 1}, {‘c’: 17, ‘b’: 8, ‘a’: 3}, {‘c’: 13, ‘ b’: 12, ‘a’: 78}, {‘c’: 2, ‘b’: 2, ‘a’: 2}]
lista_resultante [{‘c’: 17, ‘b’: 8, ‘a’ : 3}, {‘c’: 13, ‘b’: 12, ‘a’: 78}]
Método #2: Usando lambda y filtro
# Python3 code to demonstrate # filtering of list of dictionary # on basis of condition # initialising list of dictionary ini_list = [{'a':1, 'b':3, 'c':7}, {'a':3, 'b':8, 'c':17}, {'a':78, 'b':12, 'c':13}, {'a':2, 'b':2, 'c':2}] # printing initial list of dictionary print ("initial_list", str(ini_list)) # code to filter list # where c is less than 10 res = list(filter(lambda x:x["c"] > 10, ini_list )) # printing result print ("resultant_list", str(res))
Producción:
lista_inicial [{‘b’: 3, ‘c’: 7, ‘a’: 1}, {‘b’: 8, ‘c’: 17, ‘a’: 3}, {‘b’: 12, ‘ c’: 13, ‘a’: 78}, {‘b’: 2, ‘c’: 2, ‘a’: 2}]
lista_resultante [{‘c’: 17, ‘b’: 8, ‘a’ : 3}, {‘c’: 13, ‘b’: 12, ‘a’: 78}]
Método n.º 3: usar la comprensión de dictados y la comprensión de listas
# Python3 code to demonstrate # filtering of list of dictionary # on basis of condition # initialising list of dictionary ini_list = [{'a':1, 'b':3, 'c':7}, {'a':3, 'b':8, 'c':17}, {'a':78, 'b':12, 'c':13}, {'a':2, 'b':2, 'c':10}] # printing initial list of dictionary print ("initial_list", str(ini_list)) # code to filter list # where c is more than 10 res = [{ k:v for (k, v) in i.items()} for i in ini_list if i.get('c') > 10] # printing result print ("resultant_list", str(res))
Producción:
lista_inicial [{‘a’: 1, ‘c’: 7, ‘b’: 3}, {‘a’: 3, ‘c’: 17, ‘b’: 8}, {‘a’: 78, ‘ c’: 13, ‘b’: 12}, {‘a’: 2, ‘c’: 10, ‘b’: 2}]
lista_resultante [{‘a’: 3, ‘c’: 17, ‘b’ : 8}, {‘a’: 78, ‘c’: 13, ‘b’: 12}]
Publicación traducida automáticamente
Artículo escrito por garg_ak0109 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA