2011-09-21 217 views
2

我有,我想根據名稱進行排序Python字典:按名稱排序python字典?

location_map_india = { 
    101: {'name': 'Andaman & Nicobar Islands', 'lat': 11.96, 'long': 92.69, 'radius': 294200}, 
    108: {'name': 'Andhra Pradesh', 'lat': 17.04, 'long': 80.09, 'radius': 294200}, 
... 
} 

它不出來我希望它的方式。我試過了:

location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x.name) 

上面沒有工作。我該怎麼辦?

更新

下被允許和預期表現。感謝所有的幫助。 代碼:

location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x[1]["name"]) 

模板:

{% for key,value in location_map_india %}<option value="{{key}}" >{{value.name}}</option>{% endfor %} 
+5

詞典沒有訂單,因此無法排序。你的目標是什麼? –

+1

根據您的Python版本,您可以使用OrderedDict而不是標準字典。它在收藏夾模塊中。否則,解釋你的意圖,以獲得更好的方法建議。 –

+0

Duplicate:http://stackoverflow.com/q/364519/346587 – Paul

回答

6

你接近。嘗試:

location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x[1]["name"]) 

但結果將是一個列表不是字典。字典是無序的。

+0

我明白。但我想要的鍵/值對,並按順序。我該怎麼辦? –

+1

我寫的會給你的。它將是根據「名稱」排序的(鍵,值)元組的列表。 – Avaris

+0

謝謝。我可以讓它循環,但我無法打印信息:'{%for a in location_map_india%} {%endfor %}' –

1

你應該如果您使用的是必須以任何方式有順序的字典裏,沒有使用正確的數據結構嘗試

location_map_india = sorted(location_map_india.items(), key=lambda x: x[1]['name']) 
+0

謝謝,但如何從模板標籤訪問它?我嘗試過{%for a location_map_india%} {%endfor%}' –

1

嘗試使用列表或元組。

3

如果您使用python 2.7或更高版本,請看OrderedDict。使用它可能會解決您的問題。

>>> OrderedDict(sorted(d.items(), key=lambda x: x[1]['name']))