dictionary Python creando un diccionario de listas.



2 Answers

Puedes construirlo con una lista de comprensión como esta:

>>> dict((i, range(int(i), int(i) + 2)) for i in ['1', '2'])
{'1': [1, 2], '2': [2, 3]}

Y para la segunda parte de tu pregunta usa defaultdict

>>> from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
        d[k].append(v)

>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
python dictionary

Quiero crear un diccionario cuyos valores sean listas. Por ejemplo:

{
  1: ['1'],
  2: ['1','2'],
  3: ['2']
}

Si lo hago:

d = dict()
a = ['1', '2']
for i in a:
    for j in range(int(i), int(i) + 2): 
        d[j].append(i)

Obtengo un KeyError, porque d [...] no es una lista. En este caso, puedo agregar el siguiente código después de la asignación de un para inicializar el diccionario.

for x in range(1, 4):
    d[x] = list()

¿Hay una mejor manera de hacer esto? Digamos que no sé las claves que voy a necesitar hasta que esté en el segundo bucle for . Por ejemplo:

class relation:
    scope_list = list()
...
d = dict()
for relation in relation_list:
    for scope_item in relation.scope_list:
        d[scope_item].append(relation)

Una alternativa sería entonces reemplazar

d[scope_item].append(relation)

con

if d.has_key(scope_item):
    d[scope_item].append(relation)
else:
    d[scope_item] = [relation,]

¿Cuál es la mejor manera de manejar esto? Idealmente, añadir sería "simplemente funciona". ¿Hay alguna manera de expresar que quiero un diccionario de listas vacías, incluso si no conozco todas las claves cuando creo la lista por primera vez?




Su pregunta ya ha sido respondida, pero IIRC puede reemplazar líneas como:

if d.has_key(scope_item):

con:

if scope_item in d:

Es decir, d referencia a d.keys() en esa construcción. A veces, defaultdict no es la mejor opción (por ejemplo, si desea ejecutar varias líneas de código después de la else asociada con lo anterior), y encuentro la sintaxis más fácil de leer.






Related