【问题标题】:Iterating for loop only once for same values对于相同的值,只迭代一次 for 循环
【发布时间】:2015-08-06 08:20:35
【问题描述】:

我有这个:

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"

这可能吗?如何实现?

【问题讨论】:

    标签: python python-2.7 dictionary set


    【解决方案1】:

    你可以这样做:

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

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

    Mouse
    Black
    Trump
    

    或者,您可以像这样使用来自https://docs.python.org/2/library/itertools.htmlunique_everseen 配方:

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

    【讨论】:

      【解决方案2】:

      你可以试试这个:

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

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

      Mouse
      Black
      Trump
      

      【讨论】:

        【解决方案3】:

        另一种方法:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-09
          • 2017-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多