加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在python字典中检查冗余组合

发布时间:2020-12-20 11:28:50 所属栏目:Python 来源:网络整理
导读:我有以下 python字典与元组的键和值: {(A,1): (B,2),(C,3): (D,4),(B,2): (A,1),(D,4): (C,3),} 如何在键和值之间获得一组独特的组合?如此(A,1):( B,2)出现,而不是(B,2):( A,1)? 解决方法 d = {('A',1): ('B',('C',3): ('D',('B',2): ('A',('D',4): ('C',
我有以下 python字典与元组的键和值:

{(A,1): (B,2),(C,3): (D,4),(B,2): (A,1),(D,4): (C,3),}

如何在键和值之间获得一组独特的组合?如此(A,1):( B,2)出现,而不是(B,2):( A,1)?

解决方法

d = {('A',1): ('B',('C',3): ('D',('B',2): ('A',('D',4): ('C',}

>>> dict(set(frozenset(item) for item in d.items()))
{('A',3)}

这通过将字典中的每个键/值对转换为集合来工作.这很重要,因为对于任何对(a,b),set([a,b])等于set([b,a]).那么,如果我们能够获取所有这些键/值集并将它们添加到集合中,那将是完美的,这将消除所有重复项.我们无法使用set类型执行此操作,因为它不可清除,因此我们使用frozenset代替.内置的dict()函数可以接受任何可迭代的键/值对作为参数,因此我们可以传入我们的键/值对集合,它将按预期工作.

如果你有d [(‘A’,1)] =(‘A’,1)来解决这个问题,那么在关于这个问题的评论中就会产生一个很大的问题,例如你可以使用已排序的()评论中的建议:

d = {('A',1): ('A',}

>>> dict(sorted(item) for item in d.items())
{('A',4)}

这样做的好处是,对于任何重复项,排序顺序将始终为您提供“较小”的元素作为键,将“较大”作为值.

但是在Python 3.x上,如果你的键和值可能有不同的类型,你需要小心,因为sorted()将引发异常,除非iterable中的所有元素都是相同的类型:

>>> d = {1: 'A','A': 1}
>>> dict(sorted(item) for item in d.items())
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "<stdin>",in <genexpr>
TypeError: unorderable types: int() < str()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读