2014-05-13 129 views
0

內比較類型的字典我有一個這樣的名單:迭代槽列表,列表

[(datetime.date(2014, 4, 15), {'first_name': 'Mike', 'last_name': 'Jackson'}), 
(datetime.date(2014, 4, 15), {'first_name': 'Hannah', 'last_name': 'Jackson'}), 
(datetime.date(2014, 4, 16), {'first_name': 'Tom', 'last_name': 'Jackson'}, 
(datetime.date(2014, 4, 16), {'first_name': 'Macy', 'last_name': 'Jackson'})] 

我要重複這樣它這些類型的字典相互比較低谷這個名單。然後我想自己製作具有相同日期的字典列表。我怎樣才能做到這一點?

結果應該是這樣的:

列表ň

[(datetime.date(2014, 4, 15), {'first_name': 'Mike', 'last_name': 'Jackson'}), 
(datetime.date(2014, 4, 15), {'first_name': 'Hannah', 'last_name': 'Jackson'})] 

列表N + 1

[(datetime.date(2014, 4, 16), {'first_name': 'Tom', 'last_name': 'Jackson'}, 
(datetime.date(2014, 4, 16), {'first_name': 'Macy', 'last_name': 'Jackson'})] 

回答

1

鑑於a是你的列表中,該解決方案將工作:

from itertools import groupby 
for k, g in groupby(sorted(a, key=lambda x: x[0]), key=lambda x: x[0]): 
    print(list(g)) 

和產生這種輸出

[(datetime.date(2014, 4, 15), {'first_name': 'Mike', 'last_name': 'Jackson'}), 
(datetime.date(2014, 4, 15), {'first_name': 'Hannah', 'last_name': 'Jackson'})] 
[(datetime.date(2014, 4, 16), {'first_name': 'Tom', 'last_name': 'Jackson'}), 
(datetime.date(2014, 4, 16), {'first_name': 'Macy', 'last_name': 'Jackson'})] 
+0

謝謝,這工作! – user3496563

1

有這個任務叫groupby設施。但是它使用迭代器,並且依賴於要組合在一起的項目已經按順序排列的事實,因此您可能需要在應用它之前對輸入進行排序,當然取決於「排序」。然後

from itertools import groupby 

v = [ (datetime.date(2014, 4, 15), {'first_name': 'Mike', 'last_name': 'Jackson'}), 
     (datetime.date(2014, 4, 15), {'first_name': 'Hannah', 'last_name': 'Jackson'}), 
     (datetime.date(2014, 4, 16), {'first_name': 'Tom', 'last_name': 'Jackson'}), 
     (datetime.date(2014, 4, 16), {'first_name': 'Macy', 'last_name': 'Jackson'}) ] 
v.sort() # to ensure that all equal datetimes are together in the list 
result = [ list(i) for x, i in itertools.groupby(v, lambda a: a[0]) ] 

result將是這樣的:

[ [ (datetime.date(2014, 4, 15), {'first_name': 'Mike', 'last_name': 'Jackson'}), 
    (datetime.date(2014, 4, 15), {'first_name': 'Hannah', 'last_name': 'Jackson'}) ], 
    [ (datetime.date(2014, 4, 16), {'first_name': 'Tom', 'last_name': 'Jackson'}), 
    (datetime.date(2014, 4, 16), {'first_name': 'Macy', 'last_name': 'Jackson'}) ] ] 

這是你想要的。