Angenommen, ich habe ein Wörterbuch:Python - Finden Sie ähnliche Dinge in allen Wörterbuch Werte
mydict = {'first': ['cat', 'dog'], 'second': ['fish', 'cat']}
Gibt es etwas, das ‚Katze‘ zurückkehren wird? Ich benutze Python 2.7.
Angenommen, ich habe ein Wörterbuch:Python - Finden Sie ähnliche Dinge in allen Wörterbuch Werte
mydict = {'first': ['cat', 'dog'], 'second': ['fish', 'cat']}
Gibt es etwas, das ‚Katze‘ zurückkehren wird? Ich benutze Python 2.7.
finden Sie in der Dokumentation für set.intersection()
, es für die Suche nach gemeinsamen Elemente in Sequenzen sehr nützlich, und Sie können entweder das Verfahren oder die Syntax a & b
wo beide a
und b
sind Sätze verwenden.
Hier ist eine kurze Art und Weise zu tun, was Sie wollen:
>>> set.intersection(*map(set, mydict.values()))
set(['cat'])
Oder eine potenziell lesbare Lösung, die reduce()
verwendet:
reduce(set.intersection, map(set, mydict.values()))
>>> 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']
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())
nur eine andere Art:
first = True
for x in mydict:
if first:
common = set(mydict[x])
first = False
else:
common = common & set(mydict[x])
print common
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
Ich denke, dass eine Funktion mit einer For-Schleife die Arbeit machen sollte. –