簡體   English   中英

根據字典的某些元素排列字典列表

[英]arrange a list of dicts based on some elements of dict

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

有人可以給我最好的解決方案嗎?

為了使列表按特定順序排列,請使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM