Ich habe das:

names = {"Micky": "Mouse", "Goofy": "Black", "Pit": "Black", "Donald": "Trump"}

Und ich möchte dieses Wörterbuch mit einer for-Schleife durchlaufen, aber nur einmal für "Black". So etwas wie das Folgende:

for value in names.iter_only_once_values():
    print value

Output: "Mouse" , "Black" , "Trump"

Ist das möglich und wie?

2
Kostas Demiris 6 Aug. 2015 im 11:20

3 Antworten

Beste Antwort

Du kannst es so machen:

for value in set(names.values()):
    print value

Durch die Verwendung eines Sets werden alle Duplikate entfernt. Die Ausgabe für oben ist:

Mouse
Black
Trump

Alternativ können Sie das Rezept unique_everseen von https://docs.python.org verwenden /2/library/itertools.html wie folgt:

for value in unique_everseen(names.itervalues()):
     print value
5
JuniorCompressor 6 Aug. 2015 im 08:27

Sie können dies versuchen:

for key in {k: v for v, k in names.iteritems()}:
    print(key)

Dadurch werden die Wörterbucheinstellungen, Werte als Schlüssel und Schlüssel als Werte umgekehrt. So erhalten Sie die gewünschte Ausgabe:

Mouse
Black
Trump
0
bagrat 6 Aug. 2015 im 08:24

Ein anderer Weg, dies zu tun:

for name in dict.fromkeys(names.values()).keys():
    print name

Ausgabe:

Mouse
Black
Trump

Dieser Ansatz kann nützlich sein, wenn Sie OrderedDict anstelle von dict verwenden müssen, zum Beispiel:

from collections import OrderedDict

# dictionary names is sorted by values
ordered_names = OrderedDict(sorted(names.items(), key=lambda t: t[1]))
# dictionary names is printed in desired order
for name in OrderedDict.fromkeys(ordered_names.values()).keys():
    print name

Ausgabe:

Black
Mouse
Trump
0
user3752871 6 Aug. 2015 im 09:50