2014-01-08 55 views
0

我有以下數據結構的數組:的Python:排序基於一個子值

[ 
    { some: thing9, 
     key: 9, 
    }, 
    { some: thing3, 
     key: 3, 
    }, 
    { some: thing2, 
     key: 2, 
    }, 
    { some: thing1, 
     key: 1, 
    } 
] 

我如何排序基於字典的鍵值這個數組,所以我得到:

[ 
    { some: thing1, 
     key: 1, 
    }, 
    { some: thing2, 
     key: 2, 
    }, 
    { some: thing3, 
     key: 3, 
    }, 
    { some: thing9, 
     key: 9, 
    } 
] 

謝謝

+0

和(HTTP [排序在Python子值字典]:// stackoverfl ow.com/questions/18384570/sort-dict-by-sub-value-in-python?rq=1)以及其他各種各樣的dups。儘管其中大部分都是關於對dict的項目進行排序而不是對list進行排序,但基本上沒有'.items()'部分的答案是相同的。 – abarnert

回答

2
sorted(data, key=operator.itemgetter('key')) 

Sorting HOWTO更詳細地解釋了這一點。但基本思想是,所有與排序有關的函數都採用一個參數,一個可調用的值在比較值之前應用於每個值。

所以,我們想key採取list的元素之一,並返回你想要排序的東西。元素是dict s,並且您想按其key項目進行排序。 itemgetter功能正是你想要的。如果你喜歡使用Lambda表達式(如果該功能是不可用的,你可以使用,例如,lambda item: item['key']代替)

1

,這也是解決你的問題的一個合適的方式:

sorted(data, key=lambda x: x['key']) 

所以:

from pprint import pprint 

data = [ 
    { 'some': 'thing9', 
     'key': 9, 
    }, 
    { 'some': 'thing3', 
     'key': 3, 
    }, 
    { 'some': 'thing2', 
     'key': 2, 
    }, 
    { 'some': 'thing1', 
     'key': 1, 
    } 
] 

pprint(sorted(data, key=lambda x:x['key'])) 

輸出

[{'key': 1, 'some': 'thing1'}, 
{'key': 2, 'some': 'thing2'}, 
{'key': 3, 'some': 'thing3'}, 
{'key': 9, 'some': 'thing9'}] 
+0

@Downvoter:謹慎闡述? –