【问题标题】:Python - Print items from a dict sorted by valuePython - 从按值排序的字典中打印项目
【发布时间】:2016-10-12 19:56:24
【问题描述】:

这是宠物的字典以及它们的数量。

{"Birds" : 2, "Cats" : 3, "Dogs" : 4}

我想将相同宠物的最大数量排序的项目打印到相同宠物的最小数量,反之亦然。

期望的输出:

('Dogs', 4)
('Cats', 3)
('Birds', 2)

('Birds', 2)
('Cats', 3)
('Dogs', 4)

这是怎么做到的?

我不想导入任何东西。

【问题讨论】:

    标签: sorting python-3.x dictionary key-value


    【解决方案1】:

    使用 lambda 表达式,x[1] 代表值,x[0] 代表字典中键值对中的键。

    sorted(d.items(), key=lambda x: x[1], reverse=True) 
    sorted(d.items(), key=lambda x: x[0])
    

    没有 lambda expr,operator.itemgetter 做同样的事情:

    from operator import itemgetter
    
    sorted(d.items(), key=itemgetter(1), reverse=True)
    sorted(d.items(), key=itemgetter(0))
    

    【讨论】:

      【解决方案2】:

      使用带有特殊排名函数和reverse=True 参数的内置sorted 函数:

      for item in sorted(dict.items(), key=lambda x: x[1], reverse=True):
          print(item)
      

      lambda x: -x[1] 的键也应该可以工作(没有反向参数)。

      【讨论】:

        【解决方案3】:

        为了从初学者的角度理解,有时最好编写更多代码来实现这一点。 由于字典无法排序,因此您可以获取每个键值对并使用简单的函数返回一个列表。

        mydict = {"Birds" : 2, "Cats" : 3, "Dogs" : 4}
        def sortDict(dictionary):
            sorted_values = sorted(dictionary.values())
            sorted_keys = sorted(dictionary.keys())
            #sorted_values.reverse()
            #sorted_keys.reverse()
            for key, value in zip(sorted_keys, sorted_values):
                print(key, value)
        sortDict(mydict)
        

        只需删除 # 字符即可反转结果。

        【讨论】:

          猜你喜欢
          • 2012-06-29
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多