首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以相反的顺序从字典中删除重复的键(python)

问如何以相反的顺序从字典中删除重复的键(python)
EN

Stack Overflow用户
提问于 2018-02-06 04:02:56
回答 4查看 311关注 0票数 0

在以下情况下,我正在努力从字典中删除相同的键:

代码语言:javascript
复制
{('cat', 'tiger'): 18,
 ('tiger', 'cat'): 18,
 ('chines', 'gentleman'): 7,
 ('gentleman', 'chines'): 7}

在本例中,我将逆序('cat', 'tiger'): 18和('tiger', 'cat'): 18视为相同的键,并尝试创建一个新字典,如下所示

代码语言:javascript
复制
 {('cat', 'tiger'): 18,
  ('gentleman', 'chines'): 7}

我正在尝试的是适应任何逆序的情况,当我有一个类似的字典,如{(('cage', 'cat'), 5),(('cat', 'cage'), 5)}被合并或删除时,任一种。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-06 04:09:05

您可以按照以下方式做一些事情:

代码语言:javascript
复制
d = {('cat', 'tiger'): 18,
     ('tiger', 'cat'): 18,
     ('chines', 'gentleman'): 7,
     ('gentleman', 'chines'): 7}

result = {tuple(sorted(x)): y for x, y in d.items()}
# {('cat', 'tiger'): 18, ('chines', 'gentleman'): 7}

在这种dict理解中,最后遇到的每组“相等”键的值将取胜。对于您的示例数据,这应该无关紧要,因为这些键具有等量值。请注意,这也只是对元组进行排序,而不管排序后的版本实际出现在原始dict中。

票数 5
EN

Stack Overflow用户

发布于 2018-02-06 04:14:17

问题是您使用tuple值作为键,但是tuple对象是有序的,所以('a','b')不同于('b','a')。一个简单的解决方案?使用一个无序但可哈希的容器,例如,一个冻结集可以工作:

代码语言:javascript
复制
>>> data = {('cat', 'tiger'): 18,
...  ('tiger', 'cat'): 18,
...  ('chines', 'gentleman'): 7,
...  ('gentleman', 'chines'): 7}
>>>
>>> data
{('cat', 'tiger'): 18, ('tiger', 'cat'): 18, ('chines', 'gentleman'): 7, ('gentleman', 'chines'): 7}
>>> {frozenset(k):v for k,v in data.items()}
{frozenset({'cat', 'tiger'}): 18, frozenset({'gentleman', 'chines'}): 7}
票数 3
EN

Stack Overflow用户

发布于 2018-02-06 04:12:26

如果你不关心密钥中两个项目的顺序...并且与它们相关联的值总是相同的,最简单的可能是,假设您的起始字典名为old_dict

代码语言:javascript
复制
new_dict = dict()
for (key, value) in old_dict.items():
    new_dict[tuple(sorted(key))] = value

您只需遍历键/值对并将它们添加到new_dict中。由于我们现在对键进行了排序,然后将结果列表转换回元组,因此我们确保任何重新出现的对只会覆盖之前的条目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48630570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档