根据dict的某些元素排列一个dicts列表

时间:2016-12-11 12:35:41

标签: python

我有一个字典列表,每个字典有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'}]

有人能为我提供最好的解决方案。

1 个答案:

答案 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
相关问题