首页 > 解决方案 > 在列表字典中查找重复的字母

问题描述

如何在 python 列表字典中找到重复/重复的字母?我想找到相等的键和值。例如:

{'C': ['E'], 'D': [A], 'I': ['G', 'N'], 'P': ['A', 'H', 'K', 'L'], 
'S': ['T','V'], 'R': ['J', 'M', 'Q'], 'Z': ['B', 'F', 'O', 'U', 'W', 'X']}

在这种情况下,字母 A 在字典 D 和 P 中重复出现。

我该怎么做?

谢谢,

标签: pythonpython-2.7listdictionary

解决方案


@timgb 答案的一个小转折是将sumCounter结合使用,例如:

from collections import Counter

best = {'C': ['E'], 'D': ['A'], 'I': ['G', 'N'], 'P': ['A', 'H', 'K', 'L'],
        'S': ['T', 'V'], 'R': ['J', 'M', 'Q'], 'Z': ['B', 'F', 'O', 'U', 'W', 'X']}

counts = sum((Counter(v) for v in best.values()), Counter())
repeated = set(e for e, count in counts.iteritems() if count > 1)

print repeated
print [k for k, values in best.iteritems() if repeated.intersection(values)]

输出

set(['A'])
['D', 'P']

解释

你可以使用sumwithCounter因为Counter实现了__add__方法,只需要提供默认值给sum,在这种情况下是一个空的计数器。一旦有了计数,您就可以使用生成器表达式获得计数大于 1 的元素。

笔记

在这种情况下,这些代码输出重复元素和包含这些重复元素的键['D', 'P']


推荐阅读