根据不同的值对字典的键进行排序

时间:2016-08-30 11:43:24

标签: python sorting dictionary ranking

我有一本字典:

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"的数值出现一些联系。等等。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

您可以使用:

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())])

答案 1 :(得分: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})]

答案 2 :(得分:0)

列出你的字典,如下:

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)