2013-12-12 17 views
8

Więc mam tej tablicy krotek:Python Tuple do Dict, z dodatkową listę kluczy

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

I mam tę listę nazw pól:

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

chciałbym, w jednym zamachem, jeśli to możliwe, w celu przekształcenia listę krotek do 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

i co próbowałeś? –

+0

@LutzNie, jak dotąd nic, ale moim jedynym planem ataku w tym miejscu jest przejrzenie listy, przeciągnięcie wszystkich elementów listy na 5 różnych zmiennych, następnie dodanie tych 5 zmiennych do dyktanda i przeniesienie ich na nową listę. Więc tak naprawdę nie korzystałbym z listy kluczy w ogóle. Ta metoda wydaje mi się jednak bardzo uciążliwa, więc pomyślałem, że musi być czystszy sposób. – DanH

Odpowiedz

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] 

Aby wyjaśnić, zip przyjmuje jedną lub więcej sekwencji i zwraca sekwencję krotek, z pierwszym elementem każdej sekwencji wejściowej, drugą itd. Konstruktor dict przyjmuje sekwencję krotek kluczy/wartości i konstruuje obiekt słownikowy. Tak więc w tym przypadku dokonujemy iteracji na liście danych, zapinając każdą krotkę wartości za pomocą ustalonej listy kluczy i tworząc słownik z wynikowej listy par klucz/wartość.

+0

Krótkie i słodkie, i używa niezłej listy. – henrebotha

+0

Oh cool, zip() jest dla mnie nowy, dzięki :) – 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)) 

Wynik:

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