2012-03-26 9 views

答えて

8

は、配列中に共通の要素を見つけるための、それは非常に便利な、set.intersection()のためのマニュアルを参照してください、あなたは方法やabの両方がセットされている構文a & bのいずれかを使用することができます。ここで

あなたが欲しいものを行うための簡潔な方法である:

>>> set.intersection(*map(set, mydict.values())) 
set(['cat']) 

またはreduce()を使用して、潜在的に、より読みやすいソリューション:

reduce(set.intersection, map(set, mydict.values())) 
1
>>> mydict = {'first': ['cat', 'dog'], 'second': ['fish', 'cat']} 
>>> from collections import Counter 
>>> c = Counter(i for v in mydict.values() for i in v) 
>>> print [i for i in c if c[i]==len(mydict)] 
['cat'] 
5
mydict = {'first': ['cat', 'dog'], 'second': ['fish', 'cat']} 
def similar(x,y):return [c for c in set(x).intersection(set(y))] 
reduce(similar, mydict.values()) 
1

ちょうど別の方法:

first = True 
for x in mydict: 
    if first: 
     common = set(mydict[x]) 
     first = False 
    else: 
     common = common & set(mydict[x]) 
print common 
1
l2=[x for x in mydict.values()] 
dic = {} 
for e in l2: 
    for i in e: 
     dic.setdefault(i,0) 
     dic[i]+=1 
for e in dic.items(): 
    if len(l2) == e[1]: 
     print e[0] # cat