比较python中的两个字典列表

比较python中的两个字典列表,python,dictionary,compare,Python,Dictionary,Compare,我有两本字典 {key1:[list_of_objects ], {key2:[list_of_objects ]} e、 g 对于dict1和dict2中的eack键,我想比较列表中的项目 i、 e将dict1[key1]中的每个值与dict2[key1]中的相应值进行比较,依此类推。列表中的项目是对象,运行类似 if dict1[key1][0].some_function() = = dict2[key1][0].some_function() then condition

我有两本字典

{key1:[list_of_objects ], {key2:[list_of_objects ]}
e、 g

对于dict1和dict2中的eack键,我想比较列表中的项目

i、 e将dict1[key1]中的每个值与dict2[key1]中的相应值进行比较,依此类推。列表中的项目是对象,运行类似

if dict1[key1][0].some_function() = = dict2[key1][0].some_function()
     then condition
运行此比较的最快方法是什么

for key in dict1.keys():
    for a,b in zip(dict1[key],dict2[key]):
        if a.some_function() == b.some_function():
           #do something
如果您的列表很长,您可以将
zip
collections
集合交换为
izip
,这样做很容易:

for key in dict1.keys():
    diff = set(dict1[key]).symmetric_difference(dict2[key])
    if diff:
        print "%s: %s" % (key, diff)  # or do whatever

你有一个有效的方法来做到这一点吗?一旦你这样做了,你就要担心速度了。你想用dict2[key2]中的“i”做什么?它在dict1中没有相应的值。不确定您想要做什么。我假设你有一个类MyClass,它有一个成员函数,一个计算数字(或其他可比较的)的函数,可以通过==。现在,你想在每场比赛中都做些什么,而不关心列表中的顺序吗?如果dict1['key1']=[A,B,C]和dict2['key1']=[B,C,A],它应该找到任何匹配项吗?(可能没有,因为列表没有对齐)。在执行某项操作之前,是否需要匹配列表键中的所有对象?您想遍历所有键还是只比较键1?我想必须对列表进行排序,以便匹配才能完美工作,如果一次列表中有项目,而另一次列表中没有项目,则这些项目的if测试应该失败,因此会被记录!这里有两个问题。1.这不包括运行
some_函数
方法。2.OP想在项目相同的时候做点什么,而不是在项目不同的时候。好的观点。我想我被OP最初对问题的解释和示例中字符串的使用弄糊涂了。因为OP后来澄清顺序很重要,我不想费心更新这个基于集合的解决方案。如果列表中的条目是有序的且长度相等,这实际上是有效的。@json如果它们的长度不相同,您就没有什么可比较的了。或者,您是否计划在项目不同而不是相同时运行操作?比较、记录两个列表中都不存在的项目,并记录这些项目,但上述操作对我有效,我只是添加了一个检查,以确保列表的长度相同。@json此答案不假设列表中项目的顺序或长度,甚至不假设它们是列表。所有这些假设都在
做点什么
中。
for key in dict1.keys():
    diff = set(dict1[key]).symmetric_difference(dict2[key])
    if diff:
        print "%s: %s" % (key, diff)  # or do whatever