2015-01-04 22 views
6

Qual è il modo migliore per creare un dizionario di elenchi? Per esempio, se ho liste Lista1, Lista2 e vuole fare un dizionario my_dict così:Python - dizionario degli elenchi

my_dict = ['list1': list1, 'list2': list2] 

ho trovato this esempio, ma la risposta migliore è scritto nel 2009. Forse ci sono alcuni nuovi modi più laconici per fare questo?

+3

È necessario utilizzare ricci, piuttosto che tra parentesi quadre , ma per il resto questo è probabilmente buono come si arriva. – NPE

risposta

7

è necessario utilizzare le parentesi graffe invece di quadri, ma per il resto questo è probabilmente buono come si arriva:

list1 = ['a', 'b', 'c'] 
list2 = [1, 2, 3, 4] 
my_dict = {'list1': list1, 'list2': list2} 
0

Utilizzare la sintassi parentesi graffa per definire il dizionario, e dare ogni voce nel dizionario una chiave che corrisponde a ogni valore:

list_a = [1,2,3,4,5] 
list_b = [6,7,8,9,10] 

my_dict = {'list1':list_a, 'list2':list_b} 

More in the python docs

0

Questo dovrebbe funzionare:

my_dict = dict([('list1', list1), ('list2', list2)]) 

Oppure, in alternativa:

my_dict = {'list1': list1, 'list2': list2} 

Il risultato sarà lo stesso.

0

provare questo metodo, molto succinta. Bretelle ricurve, non parentesi quadre.

Penso che sia il modo più semplice per aggirarlo.

list1 = [5, 500, 543] 
list2 = [4, 4, 4] 

my_dict = {'list1':list1, 'list2': list2} 
2

Se si desidera attivare il nome della variabile in una chiave, ecco un similar question.

Se si desidera solo un dizionario di elenchi con una chiave sequenziale.

def turn_to_dict(*args): 
    return {i: v for i, v in enumerate(args)} 

lst1 = [1, 2, 3, 4] 
lst2 = [3, 4, 6, 7] 
lst3 = [5, 8, 9] 

v = turn_to_dict(lst1, lst2, lst3) 

>>> print(v) 
{0: [1, 2, 3, 4], 1: [3, 4, 6, 7], 2: [5, 8, 9]} 
+2

non usare dict come nome variabile –

+0

ah sì, grazie. – GGhe

2

Per un dizionario delle liste, si consideri un defaultdict.

A dizionario normale funziona correttamente, ma genera un errore se non viene trovata una chiave.

list1 = list("abcd") 
list2 = [1, 2, 3, 4] 


d = {"list1": list1, "list2": list2} 
d["list3"] 
# KeyError: 'list3' 

Questo può essere di disturbo in alcune applicazioni e possono richiedere la gestione delle eccezioni supplementare.

I defaultdict si comporta come un normale dict mentre l'aggiunta di una certa protezione contro gli errori.

import collections as ct 


dd = ct.defaultdict(list) 
dd.update(d) 
dd 
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}) 

Aggiunta di una chiave mancante chiamerà la funzione di fabbrica, cioè list. Qui invece di un errore, si ottiene un contenitore vuoto:

dd["list3"] 
# [] 

Questo articolo è stato aggiunto con una lista vuota.

dd 
# defaultdict(list, 
#    {'list1': ['a', 'b', 'c', 'd'], 
#    'list2': [1, 2, 3, 4], 
#    'list3': []}) 

Convertire un defaultdict ad un dict regolare impostando la fabbrica di default per None

dd.default_factory = None 
dd 
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}) 

oppure utilizzando il dict() incorporato:

dict(dd) 
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]} 
Problemi correlati