在列表字典中查找重复的字母

时间:2018-10-27 13:49:15

标签: python python-2.7 list dictionary

如何在带有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中重复。

我该怎么办?

谢谢

3 个答案:

答案 0 :(得分:1)

如果我的理解正确,您可以将collections.Counter应用于未嵌套的best.values(),并保留出现多次的项目。

演示:

>>> from itertools import chain # for un-nesting
>>> 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']}
...:
>>> dupes = [k for k,v in Counter(chain.from_iterable(best.values())).items() if v > 1]
>>> dupes
>>> ['A']

在此演示中,取消嵌套是通过itertools.chain.from_iterable完成的,但是您也可以编写一个简单的for循环,在其中循环update计数器。

>>> c = Counter()
>>> for sub in best.values():
...:    c.update(sub)
...:    
>>> dupes = [k for k,v in c.items() if v > 1]
>>> dupes
>>> ['A']

一旦您向我们展示了预期的输出,我就可以更新此答案。

答案 1 :(得分:1)

@timgb答案的一个小变化是例如将sumCounter结合使用:

#include< iostream >

using namespace::std;

int foo();              //function with no argument
int foo(int=10);        //Default argument

int foo()
{
    cout<<"\n Foo , I am foo \n";
    return 0;
}

int foo(int f)
{
    cout<<"\n I am Foo too.\n";
    return 0;
}

int main()
{
    foo();
    foo(2);
    cin.get();
    return 0;
}

输出

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'] sum一起使用,因为Counter实现了Counter方法,只需要向__add__提供默认值,在这种情况下,空柜台。一旦有了计数,就可以使用生成器表达式获得计数大于一的元素。

注意

在这种情况下,这些代码输出重复的元素和包含重复元素的键sum

答案 2 :(得分:0)

将嵌套列表平整为一个列表,使用count对每个项目进行计数,然后使用max打印其中的最大值:

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']}

flat_list = [item for sublist in [best[b] for b in best] for item in sublist]
print max([[flat_list.count(x),x] for x in set(flat_list)])