我有一个字典列表,每个字典有5个元素,我需要根据列表中每个字典的2个元素来排序这个列表。 2个元素可以取3个值。
以下是一个例子:
list = [{ 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '3'}, { 'm' : '5', 'n', : '2', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '1', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '2'}]
所以列表顺序基于2个元素n和p,它们可以取3个值(1 2和3): 1.如果n和p为1,则应首先放置这些元素 2.如果n = 1且p = 2,则接下来放置那些 3.如果n = 1且p = 3,则接下来放置那些 4.如果p = 1且n = 2,则接下来放置那些 5.最后,如果p = 1且n = 3,则接下来放置它们 6.最后是p,n是3
最终名单将是这种情况:
final_list = [{ 'm' : '3', 'n', : '1', 'o' : '7', 'p' : '1'}, { 'm' : '5', 'n', : '2', 'o' : '7', 'p' : '1'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '2'}, { 'm' : '3', 'n', : '3', 'o' : '7', 'p' : '3'}]
有人能为我提供最好的解决方案。
答案 0 :(得分:2)
要将列表放入特定顺序,请使用sorted()
内置函数或list.sort()
方法。要指定异常顺序,请将key=
参数用于其中任何一个函数。以下是一个可能适合您的电话:
result = sorted(list, key=lambda x: (x['n'], x['p']))
除此之外:不要将内置类型名称用作变量名称。这样做可能会在以后导致混淆。
示例程序:
list_ = [{ 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '3'},
{ 'm' : '5', 'n' : '2', 'o' : '7', 'p' : '1'},
{ 'm' : '3', 'n' : '1', 'o' : '7', 'p' : '1'},
{ 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '2'}]
final_list = [{ 'm' : '3', 'n' : '1', 'o' : '7', 'p' : '1'},
{ 'm' : '5', 'n' : '2', 'o' : '7', 'p' : '1'},
{ 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '2'},
{ 'm' : '3', 'n' : '3', 'o' : '7', 'p' : '3'}]
result = sorted(list_, key=lambda x: (x['n'], x['p']))
assert result == final_list