¿Cómo extraer todos los valores de un diccionario en Python?

3 minutos de lectura

Avatar de usuario de Naveen C.
Naveen C.

Tengo un diccionario d = {1:-0.3246, 2:-0.9185, 3:-3985, ...}.

¿Cómo extraigo todos los valores de d en una lista l?

Avatar de usuario de Pierre Bourdon
pierre bourdon

Si solo necesitas las teclas del diccionario 1, 2y 3 usar: your_dict.keys().

Si solo necesita los valores del diccionario -0.3246, -0.9185y -3985 usar: your_dict.values().

Si desea usar tanto claves como valores: your_dict.items() que devuelve una lista de tuplas [(key1, value1), (key2, value2), ...].

  • Si está usando Python 3, querrá usar list(your_dict.values()) para obtener una lista (y no un objeto dict_values).

    – Matías Braun

    13 de mayo de 2013 a las 0:09

Usar values()

>>> d = {1:-0.3246, 2:-0.9185, 3:-3985}

>>> d.values()
<<< [-0.3246, -0.9185, -3985]

Para Python 3, necesita:

list_of_dict_values = list(dict_name.values())

  • Gracias por mencionar ese método. list() se necesita

    – Dr. Sabbir Ahmed

    17 mayo 2020 a las 23:42

  • esto es obligatorio para acceder a los elementos usando índices

    – Pe Dro

    8 sep 2021 a las 17:11

  • De hecho, dict_name.values().tolist debería ser más rápido si tiene 1d Array, verifique esto aquí

    – Hozayfa El Rifai

    23 de septiembre de 2021 a las 12:20


  • @ hozayfa-el-rifai Eso es solo para numpy. {}.values().tolist() no funciona

    –Ted Brownlow

    2 de julio de 2022 a las 17:08

  • @TedBrownlow no estoy seguro de lo que estaba tratando de probar aquí, pero sí, ¡tienes razón!

    – Hozayfa El Rifai

    19 de septiembre de 2022 a las 9:12

Si quieres todos los valores, usa esto:

dict_name_goes_here.values()

Si quieres todas las claves, usa esto:

dict_name_goes_here.keys()

SI desea todos los elementos (tanto claves como valores), usaría esto:

dict_name_goes_here.items()

Avatar de usuario de Michael Dorner
miguel dorner

Para dictados anidados, listas de dictados y dictados de dictados enumerados, … puede usar

from typing import Iterable

def get_all_values(d):
    if isinstance(d, dict):
        for v in d.values():
            yield from get_all_values(v)
    elif isinstance(d, Iterable) and not isinstance(d, str): # or list, set, ... only
        for v in d:
            yield from get_all_values(v)
    else:
        yield d 

Un ejemplo:

d = {'a': 1, 'b': {'c': 2, 'd': [3, 4]}, 'e': [{'f': 5}, {'g': set([6, 7])}], 'f': 'string'}
list(get_all_values(d)) # returns [1, 2, 3, 4, 5, 6, 7, 'string']

Muchas gracias a @vicent por señalar que las cuerdas también son Iterable! Actualicé mi respuesta en consecuencia.

PD: si, me encanta yield. 😉

  • Esto es casi exactamente lo que estaba buscando. Tenga en cuenta que las cadenas también son iterables. En mi caso de uso, los valores en mi diccionario también eran cadenas, por lo que me encontraría con un error sobre la profundidad recursiva alcanzada. Para solucionarlo, hice “` def get_all_values(d): if isinstance(d, dict): for v in d.values(): yield from get_all_values(v) elif isinstance(d, escribiendo.Iterable) and not isinstance( d, str): # o list, set, … solo para v en d: yield from get_all_values(v) else: yield d “`

    – Vicente

    28 de noviembre de 2022 a las 21:06


  • Muchas gracias por señalar ese problema. ¡Tienes toda la razón! ¡Actualicé mi respuesta!

    – Michael Dorner

    29 de noviembre de 2022 a las 8:22

Avatar de usuario de David Heffernan
David Heffernan

Llama a values() método en el dict.

  • Esto es casi exactamente lo que estaba buscando. Tenga en cuenta que las cadenas también son iterables. En mi caso de uso, los valores en mi diccionario también eran cadenas, por lo que me encontraría con un error sobre la profundidad recursiva alcanzada. Para solucionarlo, hice “` def get_all_values(d): if isinstance(d, dict): for v in d.values(): yield from get_all_values(v) elif isinstance(d, escribiendo.Iterable) and not isinstance( d, str): # o list, set, … solo para v en d: yield from get_all_values(v) else: yield d “`

    – Vicente

    28 de noviembre de 2022 a las 21:06


  • Muchas gracias por señalar ese problema. ¡Tienes toda la razón! ¡Actualicé mi respuesta!

    – Michael Dorner

    29 de noviembre de 2022 a las 8:22

Avatar de usuario de Stephen Rauch
Esteban Rauch

Si quieres todos los valores, usa esto:

dict_name_goes_here.values()

¿Ha sido útil esta solución?