2012-11-20 2 views
6

Sto importando una matrice, trasformando la prima riga in chiavi e trasformando il resto delle righe in valori. Voglio comprimere i tasti con ogni valore e inserirli in un dizionario.Come faccio a chiavi zip con singoli valori nei miei elenchi in python?

es:

Se ho il seguente:

voglio prendere ogni valore in V (per x in V) e zip (ke x) e poi convertire in un dizionario .

Quindi aggiungerò i dizionari a un elenco di dizionari.

Alla fine avrei dovuto:

dicts = [{'a':1, 'b':2}, {'a':3, 'b':4}] 

In questo momento, io sono solo zippare i miei file con le mie chiavi. Come posso risolvere questo?

matrix_filename = raw_input("Enter the matrix filename: ") 
matrix = [i.strip().split() for i in open(matrix_filename).readlines()] 
keys = matrix[0] 
vals= (matrix[1:]) 
N=len(vals) 

dicts = [] 

for i in range(1,N): 
    for j in range(1,N): 
     vals[i-1][j-1] = int(matrix[i][j]) 
     dicts = dict(zip(keys,vals)) 

risposta

3

utilizzando itertools.cycle():

In [51]: from itertools import * 

In [52]: cyc=cycle(k) 

In [53]: [{next(cyc):y for y in x} for x in v] 
Out[53]: [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] 
12
>>> [dict(zip(k, x)) for x in v] 
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] 
+2

+1 Devi solo in una sola riga, quello che mi ha portato un nidificato ciclo for. :( –

+0

Non ti piace quanto sia facile da fare in Python una volta che conosci i tuoi strumenti? –