2012-04-09 10 views
0

Ich würde gerne wissen, wie man Werte in einem Wörterbuch, die für alle Schlüssel erscheinen.Wie überprüft man, ob ein Python Dictionary Schlüssel hat die gleichen Werte und extrahieren diese Werte

So zum Beispiel, wenn ich habe folgendes Wörterbuch:

d = {'a': [num_1, num_2], 'b': [num_1], 
       'c': [num_1,num_2, num_3]} 

Ich mag würde den Wert extrahieren, die für alle Schlüssel vorhanden ist, in diesem Fall NUM_1.

Wie kann ich das erreichen?

EDIT: Wie würde ich den gemeinsamen Wert (s) in einer Liste speichern?

+0

möglich Duplikat helfen [Wie gemeinsame Elemente in der Liste der Listen zu finden?] (Http://stackoverflow.com/questions/10066642/how-to-find-common-elements-in- List-of-Lists) – agf

Antwort

0

etwas tun:

d = {'a': ['num_1', 'num_2'], 'b': ['num_1'], 'c': ['num_1', 'num_2', 'num_3']} 

vals = d.values() 
uniq = set(vals[0]) 

for lst in vals[1:]: 
    uniq.intersection_update(lst) 

# now `uniq` holds the intersected values: 
print uniq 
> set(['num_1']) 

# to get the result as a list: 
uniq = list(uniq) 
print uniq 
> ['num_1'] 
+0

Sie müssen 'set' nicht auf jeder Liste aufrufen, nur eine -' set' Methoden können beliebig iteriert werden. – agf

+0

@agf ist es behoben –

+0

Danke Oscar. Wie kann ich das Ergebnis als eigenständige Liste erhalten? ['num_1'] anstelle von set (['num_1']) – greenpool

0

alle Werte Sätze konvertieren und dann ihre Kreuzung nehmen:

set.intersection(*(set(v) for v in d.values())) 
+1

Sie können 'set.intersection' nicht mit einem ersten Argument aufrufen, das kein Set ist. Sie müssen auch nicht jede Liste zu einem 'Set' machen. – agf

+0

Sorry, ich bin neu in "Set". Ich versuche es jetzt zu lesen. Gibt es eine Möglichkeit, die gemeinsamen Werte in einer Liste zu speichern? – greenpool

+0

Sie können es einfach mit 'list' konvertieren. Siehe die anderen Antworten, die ein bisschen effizienter sind. – Taymon

0

Meine ungerade Arbeits Weg

vals = [i for v in d.values() for i in v] 
set([i for i in vals if vals.count(i) == len(d.values())]) 
-1

Liste (set (d ['a']) & Satz (d ['c']) & Satz (d ['b']))

Dies sollte

Verwandte Themen