2017-04-07 62 views
2

我是初學者編碼。我正在努力重新安排雙字典。例如,如何按值重新排列雙字典(Python3)

dict = { 
'student_A': { 
    'name': 'Hiro', 
    'age': 22, 
}, 
'student_B': { 
    'name': 'Alex', 
    'age': 24, 
    }, 
'student_C': { 
    'name': 'Jon', 
    'age': 23, 
    } 
} 

在這段代碼中,我該如何按照年齡順序排列? :

[ 
{ 
    'name': 'Alex' 
}, 
{ 
    'name': 'Jon' 
}, 
{ 
    'name': 'Hiro' 
} 
] 

這將不勝感激,如果你能解釋的細節!

+5

'列表(排序(dict.values(),鍵=拉姆達X:X [ '年齡']))'。不過,請注意,不要將變量命名爲內置函數。它掩蓋了內置插件。 – zondo

+0

@zondo哎喲,視力誤解了大腦,謝謝你的通知。 –

+0

也許你掙扎的原因是你想把結果放回字典中?字典不能按照定義進行排序。如果你真的在尋找一個清單,按照你的語法建議,你會沒事的。 –

回答

1

你可以這樣說:

value_list = list(dict.values()) 
value_list.sort(key=lambda value: value['age']) 

這將使value_list在字典中,按年齡排序值的列表。你可以通過調用dict.values()來獲得dict_values對象。然後可以將該對象轉換爲列表,然後通過調用list.sort()方法對其進行排序。 key參數是一個函數,它將返回每個字典的年齡。

如果您還沒有看到lambda name: statement語法,請參考here

+0

謝謝你的回答!我可以在你的講座之後從字典中做出列表,但是它並沒有改變順序。 – user7421972

1

它看起來(從你輸出的)你喜歡你實際上想要的名字以相反的年齡?而且,您還只需要列出所列對象中的名稱,以便濾除原始對象的年齡部分。

在這種情況下,您可能想要使用列表理解,這是一種非常有用的pythonic方式,可以對列表執行過濾和映射類型操作。要了解更多關於列表理解的信息,請查看官方documentation

的如何做到這一點的一個例子:

>>> my_ordered_list = [ {'name': student['name']} for student in sorted(dict.values(), key=lambda x:-x['age']) ] 

>>> my_ordered_list 
[{'name': 'Alex'}, {'name': 'Jon'}, {'name': 'Hiro'}] 
+0

謝謝你的回答和有用的鏈接。我會盡力去理解並做到。 – user7421972