首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从字典中删除重复项?

如何从字典中删除重复项?
EN

Stack Overflow用户
提问于 2018-03-07 09:30:21
回答 2查看 0关注 0票数 0

我有以下Python 2.7字典数据结构:

代码语言:javascript
复制
{112762853378: 
   {'dst':['10 .121.4.136'], 
    'src':['1.2.3.4'], 
    '别名':['www.example.com']
   },
 112762853385: 
   {'dst':['10 .121.4.136'], 
    'src':['1.2.3.4'], 
    '别名':['www.example.com']
   },
 112760496444: 
   {'dst':['10 .121.4.136'], 
    'src':['1.2.3.4']
   },
 112760496502: 
   {'dst':['10 .122.195.34'], 
    'src':['4.3.2.1']
   },
 112765083670: ...
}

字典键将永远是唯一的。Dst,src和别名可以是重复的。所有记录将始终有一个dst和src,但不是每个记录都必须有一个别名,如第三条记录中所示。

在样本数据中,前两个记录中的任何一个都将被删除(对我来说哪个并不重要)。第三条记录会被认为是唯一的,因为虽然dst和src是相同的,但它是缺少别名的。

我该如何才能做到呢?我对Python的有限理解将数据结构解释为一个字典,其中存储在字典中的值......字典的字典,这是正确的吗?

EN

Stack Overflow用户

发布于 2018-03-07 18:37:26

一种简单的方法是使用每个内部字典中字符串数据的串联作为关键字来创建反向字典:

代码语言:javascript
复制
>>> import collections
>>> reverse_d = collections.defaultdict(list)
>>> for key, inner_d in d.iteritems():
...     key_str = ''.join(inner_d[k][0] for k in ['dst', 'src', 'alias'] if k in inner_d)
...     reverse_d[key_str].append(key)
... 
>>> duplicates = [keys for key_str, keys in reverse_d.iteritems() if len(keys) > 1]
>>> duplicates
[[112762853385, 112762853378]]

你可以使用一个常规字典而不是a,defaultdict并重新反转它,如下所示:

代码语言:javascript
复制
>>> for key, inner_d in d.iteritems():
...     key_str = ''.join(inner_d[k][0] for k in ['dst', 'src', 'alias'] if k in inner_d)
...     reverse_d[key_str] = key
>>> new_d = dict((val, d[val]) for val in reverse_d.itervalues())
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007537

复制
相关文章

相似问题

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