我在这样的列表中有一个字典:sample_dict = [{1: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], \ [1, 2, 3, 4, 5], \ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]}, \ {2: [[3, 4, 6, 7, 8, 9, 10, 11], [1, 2, 3, 6, 10], []]}]现在,我想用 key1的第一个值检查列表中 key2的第一个值。像这样的东西,比较值(键 1 列表的第一个值)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] with(键 2 列表的第一个值)[3, 4, 6, 7, 8, 9, 10, 11]如果它们匹配,我想将它附加到一个新列表中matching_list,如果不是,我想将不匹配的值附加到另一个列表中non_matching_list。这是我迄今为止尝试过的,matching_list = []non_matching_list = []for each_dict in sample_dict: current_dict_values = [] for key, value_list in each_dict.items(): temp_dict_values = [] for value in value_list: temp_dict_values.append(value) .... don't know how to keep track of key 1's first list of lists values.我正在考虑创建一个临时列表来跟踪关键1列表值,但我被卡住了,不知道如何继续。我的最终输出应该是这样的:matching_list = [[3,4,6,7,8,9,10], [1,2,3], []]non_matching_list = [[1,2,5,11],[4,5,6,10],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]我怎样才能实现我的输出?任何想法都会很棒。
1 回答

梦里花落0921
TA贡献1772条经验 获得超6个赞
这可以通过以下方法实现lists,以sets作出类似的操作symmetric_difference(),并intersection()为您non_matching_list和matching_list分别。
这是其中一种解决方案:
matching_list, non_matching_list = [], []
for lists1, lists2 in zip(sample_dict[0].values(), sample_dict[1].values()):
for l1, l2 in zip(lists1, lists2):
matching_list.append(list(set(l1) & set(l2)))
non_matching_list.append(list(set(l1).symmetric_difference(set(l2))))
请注意, usingset(l1) & set(l2)与 相同set(l1).intersection(set(l2)),所以这里基本上是一个交集操作。
我还使用内置zip()函数来聚合每个可迭代对象(两个列表)中的元素。
添加回答
举报
0/150
提交
取消