2013-12-12 9 views
8

Quindi ho questa serie di tuple:Python Tuple a Dict, con ulteriore elenco di chiavi

[(u'030944', u'20091123', 10, 30, 0), (u'030944', u'20100226', 10, 15, 0)] 

E ho questa lista di nomi di campo:

['id', 'date', 'hour', 'minute', 'interval'] 

Vorrei, in un colpo solo, se possibile, per convertire l'elenco di tuple a un dict:

[{ 
    'id': u'030944', 
    'date': u'20091123', 
    'hour': 10, 
    'min': 30, 
    'interval': 0, 
},{ 
    'id': u'030944', 
    'date': u'20100226', 
    'hour': 10, 
    'min': 15, 
    'interval': 0, 
}] 
+0

E che cosa hai provato? –

+0

@LutzHorn finora nulla, ma il mio unico piano di attacco a questo punto è quello di scorrere l'elenco, tirare tutti gli elementi della lista in 5 variabili diverse, quindi aggiungere quelle 5 variabili in un dict e inviarlo alla nuova lista. Quindi non utilizzerei affatto l'elenco delle chiavi. Questo metodo mi sembra molto complicato, quindi ho pensato che ci fosse un modo più pulito. – DanH

risposta

22
data = [(u'030944', u'20091123', 10, 30, 0), (u'030944', u'20100226', 10, 15, 0)] 
fields = ['id', 'date', 'hour', 'minute', 'interval'] 
dicts = [dict(zip(fields, d)) for d in data] 

Per spiegare, zip accetta una o più sequenze e restituisce una sequenza di tuple, con il primo elemento di ciascuna sequenza di input, la seconda ecc. Il costruttore dict accetta una sequenza di tuple chiave/valore e costruisce un oggetto dizionario. Quindi, in questo caso, iteriamo attraverso l'elenco di dati, comprimendo ogni tupla di valori con l'elenco fisso di chiavi e creando un dizionario dall'elenco risultante di coppie chiave/valore.

+0

Breve e dolce, e usa una buona comprensione della lista. – henrebotha

+0

Oh cool, zip() è nuovo per me, grazie :) – DanH

2
import json 

ts = [(u'030944', u'20091123', 10, 30, 0), (u'030944', u'20100226', 10, 15, 0)] 
fs = ['id', 'date', 'hour', 'minute', 'interval'] 
us = [] 

for t in ts: 
    us.append(dict(zip(fs, t))) 

print(json.dumps(us)) 

Risultato:

[ 
    { 
     "date": "20091123", 
     "interval": 0, 
     "minute": 30, 
     "id": "030944", 
     "hour": 10 
    }, 
    { 
     "date": "20100226", 
     "interval": 0, 
     "minute": 15, 
     "id": "030944", 
     "hour": 10 
    } 
] 
Problemi correlati