我有一个dict,其中(sourceIP,destinationIP)为键,(number_of_packets)为值。 dict输出如下
New dictionary contents
Key : Value
('A', 'B') : 400
('B', 'A') : 500
('A', 'C') : 10
('C', 'A') : 20
我需要遍历dict的键并检查第一个键中的第一个元素(sourceIP)是否是第二个键中的第二个元素(destinationIP)。如果是,那么我应该添加d [k1]和d [k2]的值并删除dict中的第二行。 即没有A - >; B = 400且B - > A = 500,我应该只有A - B = 900.请建议我如何迭代dict的键并检查元组的元素?
答案 0 :(得分:1)
您可以尝试:
c = {('A', 'B') : 400,('B', 'A') : 500,('A', 'C') : 10,('C', 'A') :20}
c = {k:((c[k] if k in c else 0) + (c[k[::-1]] if (k[::-1]) in c else 0)) for k in set(map(lambda x: tuple(sorted(x)),c.keys()))}
最后一行可以压缩成:
c = {k:(c.get(k,0) + c.get(k[::-1],0)) for k in set(map(lambda x: tuple(sorted(x)),c.keys()))}
迭代一组规范化的密钥,这种规范化包括对组成每个密钥的元组的元素进行排序。在每次迭代中,检查地图中存在哪些关键排列,添加可用的那些。