我有一个这样的清单:
[(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'})]我想在这个列表中迭代,这样它就可以将这些数据进行比较。然后,我想要做自己的名单,有相同的日期。我该怎么做?
其结果应该是:
列表n
[(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'})]发布于 2014-05-13 08:36:49
这个任务有一个名为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'}) ] ]这就是你想要的。
https://stackoverflow.com/questions/23626018
复制相似问题