如何解决比较元组和列表的字典
我发现了多个与此主题相关的 posts(这个 one),但这些选项都不适用于我的字典。我想比较我的字典并知道相同值的数量以及每个字典唯一的键值对。
我正在使用两个字典,以元组为键,列表为值(其中第二个值是另一个列表),如下所示:
Dict1:{(10,11): ['C',['T']],(20,21): ['C',(34,35): ['G',['A']],(68,69): ['A',['T','G']]}
Dict2:{(10,(40,41): ['T',['G']],'G']]}
我想比较这些字典并有不同的输出。使用我的示例,这是我想要的变量:
- 2 个值相同并出现在两个字典中
- 2 个值仅在 dict1 中
- 2 个值仅在 dict2 中
我正要循环遍历 dict1 并每次将每个键与所有 dict2 进行比较(并且每次满足条件时我都会更新变量)但我知道这可能不是最有效的方法
有人有更快的想法吗?
谢谢
解决方法
您可以先使用 set-like methods of dict.keys() objects
过滤掉键,然后继续获取对:
>>> same_keys = Dict1.keys() & Dict2.keys()
>>> dict1_unq_keys = Dict1.keys() - Dict2.keys()
>>> dict2_unq_keys = Dict2.keys() - Dict1.keys()
>>> same_pairs = [(key,Dict1[key]) for key in same_keys if Dict1[key] == Dict2[key]]
>>> Dict1_unq_pair = [(key,Dict1[key]) for key in dict1_unq_keys]
>>> Dict2_unq_pair = [(key,Dict2[key]) for key in dict2_unq_keys]
>>> same_pairs
[((68,69),['A',['T','G']]),((10,11),['C',['T']])]
>>> Dict1_unq_pair
[((34,35),['G',['A']])]
>>> Dict2_unq_pair
[((40,41),['G']])]
注意:
如果您可以使用 tuples
作为 dict
值而不是 lists
,这可以更轻松地完成,通过直接使用 dict.items()
设置操作来获取相同的对。
例如,如果 Dict1
和 Dict2
的形式如下:
>>> Dict1
{(10,11): ('C',('T',)),(20,21): ('C',(34,35): ('G',('A',(68,69): ('A','G'))}
>>> Dict2
{(10,(40,41): ('T',('G','G'))}
# Then you could simple do:
>>> same_pairs = list(Dict1.items() & Dict2.items())
>>> same_pairs
[((68,'G'))),('C',)))]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。