2015-11-18 11 views
6

Ho due elenchi come segue.Valori mancanti durante la creazione di un dizionario con due valori

count = (1, 0, 0, 2, 0, 0, 1, 1, 1, 2) 
bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0], [8.0, 9.0], [9.0, 10.0], [10.0, 11.0], [11.0, 12.0], [12.0]] 

Ho provato a creare un dizionario utilizzando seguente;

dictionary = dict(itertools.izip(count, bins)) 

E mi {"0": [7.0, 8.0], "1": [10.0, 11.0], "2": [11.0, 12.0]}

dà dà solo i valori chiave univoci solo, ma ho bisogno di ottenere i tutte le coppie, come di seguito.

{"0": [3.0, 4.0],"0": [4.0, 5.0],"0": [6.0, 7.0],"0": [7.0, 8.0], "1": [2.0, 3.0],"1": [8.0, 9.0], "1": [9.0, 10.0], "1": [10.0, 11.0], "2": [6.0, 7.0] ,"2": [11.0, 12.0]} 

o scambio di chiavi e valori nel dizionario precede è accettabile. (Perché le chiavi devono essere unici) Come posso fare questo?

+1

Non è possibile utilizzare un 'list' come chiave come sono mutabili. Usare una 'tupla' funzionerebbe. –

+0

Se uno scambio è accettabile, potresti dirci cosa stai veramente cercando di fare? Questo sembra un problema XY. Su una nota correlata, cosa c'è di sbagliato con solo 'itertools.izip (count, lst)'? –

+0

@MadPhysicist Ho bisogno di creare un Json usando questi due elenchi –

risposta

3

non è possibile utilizzare un list come chiave per un dizionario com'è mutabile.

si potrebbe convertire il list ad un tuple:

>>> count = (1, 0, 0, 2, 0) 
>>> bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0]] 

>>> {tuple(key): value for (key, value) in zip(bins, count)} 
{(4.0, 5.0): 0, 
(3.0, 4.0): 0, 
(5.0, 6.0): 2, 
(2.0, 3.0): 1, 
(6.0, 7.0): 0} 

Se volete puntate a json, le chiavi devono essere stringhe. Si potrebbe convertire i bidoni in stringhe invece:

>>> {str(key): value for (key, value) in zip(bins, count)} 
{'[2.0, 3.0]': 1, '[4.0, 5.0]': 0, '[6.0, 7.0]': 0, '[5.0, 6.0]': 2, '[3.0, 4.0]': 0} 

>>> import json 
>>> json.dumps(_) 
'{"[2.0, 3.0]": 1, "[4.0, 5.0]": 0, "[6.0, 7.0]": 0, "[5.0, 6.0]": 2, "[3.0, 4.0]": 0}' 

In alternativa, basta puntate le coppie, e rendere il dizionario sul lato sbagliato:

>>> zip(bins, count) 
[([2.0, 3.0], 1), ([3.0, 4.0], 0), ([4.0, 5.0], 0), ([5.0, 6.0], 2), ([6.0, 7.0], 0)] 

>>> import json 
>>> json.dumps(_) 
'[[[2.0, 3.0], 1], [[3.0, 4.0], 0], [[4.0, 5.0], 0], [[5.0, 6.0], 2], [[6.0, 7.0], 0]]' 
+0

C'è un modo per convertire questo in formato Json? –

+0

@ManuraOmal Questa è una domanda diversa. Risposta breve, sì, provalo. Se non funziona, cerca. –

+0

@ManuraOmal Non ho usato 'json' da python prima. Ho appena provato e le chiavi devono essere stringhe. Aggiornerò la risposta in modo da avere stringhe come chiavi invece di tuple –

2

{"0": [3.0, 4.0],"0": [4.0, 5.0]} non è un dizionario valido, poiché le chiavi di un dizionario devono essere univoche. Se si vuole veramente le voci in count essere le chiavi, la cosa migliore che mi viene in mente è quello di fare un list di valori per ogni chiave:

count = (1, 0, 0, 2, 0, 0, 1, 1, 1, 2) 
bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0], [8.0, 9.0], [9.0, 10.0], [10.0, 11.0], [11.0, 12.0], [12.0]] 
answer = {} 
for c, b in zip(count, bins): 
    if c not in answer: answer[c] = [] 
    answer[c].append(b) 
+0

Il risultato che ho ottenuto è stato - '{0: [, , , ], 1: [, , , ], 2: [, ]} ' –

+0

@ManuraOmal: oops! mi dispiace per quel refuso. È stato risolto ora – inspectorG4dget

+0

Grazie mille. Non dà l'aspettativa ma posso gestire con la tua risposta –

Problemi correlati