根据不同的值对字典的键进行排序
Sorting the keys of a dictionary based on different values
我有字典:
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" 等数值的基础上。
我该怎么做?
>>> 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})]
像这样列出你的字典:
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)
您可以使用:
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())])
我有字典:
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" 等数值的基础上。
我该怎么做?
>>> 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})]
像这样列出你的字典:
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)
您可以使用:
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())])