2011-09-21 93 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']))