我有以下Python 2.7字典数据结构:
{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的有限理解将数据结构解释为一个字典,其中存储在字典中的值......字典的字典,这是正确的吗?
发布于 2018-03-07 17:30:37
如果该值不在结果字典中,你可以查看字典中的每个项目,并将它们添加到结果字典中:
input_raw = {112762853378:
{'dst': ['10.121.4.136'],
'src': ['1.2.3.4'],
'alias': ['www.example.com']
},
112762853385:
{'dst': ['10.121.4.136'],
'src': ['1.2.3.4'],
'alias': ['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']
}
}
result = {}
for key,value in input_raw.items():
if value not in result.values():
result[key] = value
print result
发布于 2018-03-07 18:37:26
一种简单的方法是使用每个内部字典中字符串数据的串联作为关键字来创建反向字典:
>>> 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
并重新反转它,如下所示:
>>> 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())
https://stackoverflow.com/questions/-100007537
复制相似问题