为了账号安全,请及时绑定邮箱和手机立即绑定

比较属于不同键的字典值

比较属于不同键的字典值

三国纷争 2021-08-14 12:47:11
我在这样的列表中有一个字典: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()函数来聚合每个可迭代对象(两个列表)中的元素。


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号