当键是元组时访问dict的键,如果它们相等则检查元组的元素

时间:2014-06-17 05:39:03

标签: python python-2.7 dictionary tuples key-value

我有一个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的键并检查元组的元素?

1 个答案:

答案 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()))}

迭代一组规范化的密钥,这种规范化包括对组成每个密钥的元组的元素进行排序。在每次迭代中,检查地图中存在哪些关键排列,添加可用的那些。