微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较元组和列表的字典

如何解决比较元组和列表的字典

我发现了多个与此主题相关的 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() 设置操作来获取相同的对。

例如,如果 Dict1Dict2 的形式如下:

>>> 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 举报,一经查实,本站将立刻删除。