2016-07-24 51 views
0

所以我知道如何排序字典的列表,但我不知道如何在同一時間獲取索引。假設我有這樣一個字典:如何獲得python中的排序列表的索引?

cities = [{'city': 'Harford', 'state': 'Connecticut'}, 
      {'city': 'Boston', 'state': 'Massachusetts'}, 
      {'city': 'Worcester', 'state': 'Massachusetts'}, 
      {'city': 'Albany', 'state': 'New York'}, 
      {'city': 'New York City', 'state': 'New York'}, 
      {'city': 'Yonkers', 'state': 'Massachusetts'}] 

我可以通過「國家」使用排序此字典:

new_cities = sorted(cities, key=itemgetter('state')) 

並獲得:

cities = [{'city': 'Harford', 'state': 'Connecticut'}, 
      {'city': 'Boston', 'state': 'Massachusetts'}, 
      {'city': 'Worcester', 'state': 'Massachusetts'}, 
      {'city': 'Yonkers', 'state': 'Massachusetts'}, 
      {'city': 'Albany', 'state': 'New York'}, 
      {'city': 'New York City', 'state': 'New York'}] 

但我怎麼能拿到指標的同時列表?

+3

索引什麼? – MattDMo

+1

[Python:Index a Dictionary?]可能重複(http://stackoverflow.com/questions/4326658/python-index-a-dictionary) – kaitian521

+0

@MattDMo:抱歉,不清楚。字典中正在排序的元素的索引 –

回答

1
new_cities = sorted(enumerate(cities), key=lambda x: x[1]['state']) 

枚舉它首先會給你的原始cities列表的索引,然後可以排序。

>>> new_cities 
[(0, {'city': 'Harford', 'state': 'Connecticut'}), 
(1, {'city': 'Boston', 'state': 'Massachusetts'}), 
(2, {'city': 'Worcester', 'state': 'Massachusetts'}), 
(5, {'city': 'Yonkers', 'state': 'Massachusetts'}), 
(3, {'city': 'Albany', 'state': 'New York'}), 
(4, {'city': 'New York City', 'state': 'New York'})] 
+0

這實際上解決了我的問題。你能解釋一下關於使用'x [1]'的一些信息,爲什麼它可以返回索引? –

+0

當然。枚舉你的列表返回一個元組列表,其中第一個元素是索引,第二個元素是你的字典對象之一(參見docs [here](https://docs.python.org/2/library/functions.html#enumerate ))。現在當你排序時,你想基於每個元組中的第二個元素(字典對象而不是索引)進行排序,所以你告訴lambda函數查看x [1](即每個元組中的第二個元素)。 – bunji

+0

實際上,枚舉函數返回一個枚舉對象,但出於您的目的,它的行爲就像一個元組列表。 – bunji

相關問題