对相同的值只迭代一次 for 循环

Iterating for loop only once for same values

我有这个:

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

我想用 for 循环遍历这个字典,但只为 "Black" 遍历一次。 类似于以下内容:

for value in names.iter_only_once_values():
    print value

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

这可能吗?如何实现?

你可以这样做:

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

使用集将删除所有重复项。上面的输出是:

Mouse
Black
Trump

或者,您可以像这样使用 https://docs.python.org/2/library/itertools.html 中的 unique_everseen 食谱:

for value in unique_everseen(names.itervalues()):
     print value

你可以试试这个:

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

这将颠倒你的字典设置,值作为键,键作为值。所以你会得到想要的输出:

Mouse
Black
Trump

另一种方法:

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

输出:

Mouse
Black
Trump

当您需要使用 OrderedDict 而不是 dict 时,此方法很有用,例如:

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

输出:

Black
Mouse
Trump