Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历列表并比较列表中的dict_Python_List_Dictionary - Fatal编程技术网

Python 遍历列表并比较列表中的dict

Python 遍历列表并比较列表中的dict,python,list,dictionary,Python,List,Dictionary,我有这样一份清单: [(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, 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'})]
我想通过这个列表进行迭代,以便将这些dict相互比较。然后我想自己列一张日期相同的单子。我该怎么做

结果应该是:

列表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'})]

如果
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'})]

有一个用于此任务的工具叫做
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]) ]
结果将如下所示:

[ [ (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'}) ] ]
这正是你想要的