【问题标题】:Sorting the keys of a dictionary based on different values根据不同的值对字典的键进行排序
【发布时间】:2023-03-13 12:42:01
【问题描述】:

我有一本字典:

d = {"A":{"a":1, "b":2, "c":3}, "B":{"a":5, "b":6, "c":7}, "C":{"a":4, "b":6, "c":7}}

我想对列表中的键“A”、“B”和“C”进行排序,首先根据“a”的数值,然后如果出现一些平局,则根据“b”的数值“ 等等。

我该怎么做?

【问题讨论】:

标签: python sorting dictionary ranking


【解决方案1】:

你可以使用:

sorted(d, key=lambda key:(d[key]['a'], d[key]['b'], d[key]['c']))

如果内部字典中有任意数量的元素,这是一个通用解决方案:

sorted(d, key=lambda key:[value for value in sorted(d[key].items())])

【讨论】:

    【解决方案2】:
    >>> d = {"A":{"a":1, "b":2, "c":3}, "B":{"a":5, "b":6, "c":7}, "C":{"a":4, "b":6, "c":7}}
    >>> 
    >>> d.items()
    [('A', {'a': 1, 'c': 3, 'b': 2}), ('C', {'a': 4, 'c': 7, 'b': 6}), ('B', {'a': 5, 'c': 7, 'b': 6})]
    >>> sorted(d.items(), key=lambda x: [y[1] for y in sorted(x[1].items())])
    [('A', {'a': 1, 'c': 3, 'b': 2}), ('C', {'a': 4, 'c': 7, 'b': 6}), ('B', {'a': 5, 'c': 7, 'b': 6})]
    

    【讨论】:

      【解决方案3】:

      像这样列出你的字典:

      my_list = [(key, value) for item in d.items()]
      

      然后使用您想到的任何标准对列表进行排序:

      def sort_function(a, b):
         # whatever complicated sort function you like
         return True if a > b else False
      
      my_list.sort(sort_function)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-11
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多