【问题标题】:Sorting a python dictionary by name?按名称对python字典进行排序?
【发布时间】:2011-11-22 03:40:01
【问题描述】:

我有一个 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 %}

【问题讨论】:

  • 字典没有顺序,因此无法排序。你的目标是什么?
  • 根据您的 Python 版本,您可以使用 OrderedDict 而不是标准字典。它在集合模块中。否则,请解释您的意图以获得更好的方法建议。
  • 感谢您的建议。我有一个数据结构,我想按名称按自然顺序对其进行排序。看来没那么简单。
  • 使用 .items() 而不是 .iteritems() 以确保与 Python 3.x 的兼容性

标签: python sorting dictionary


【解决方案1】:

你很接近。试试:

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

但结果将是一个列表而不是一个字典。 dict 是无序的。

【讨论】:

  • 我明白了。但我想要键/值对并按顺序排列。我该怎么办?
  • 我写的东西会给你。它将是根据“名称”排序的(键,值)元组列表。
  • 谢谢。我可以让它循环,但我不能让它打印信息:{% for a in location_map_india %}&lt;option value="{{ a.key }}" &gt;{{ a.value }}&lt;/option&gt;{% endfor %}
  • 我不知道那是什么语言。但是,如果您想在我给出的排序之后访问元素,请使用 a[0] 作为键,使用 a[1] 作为值。
  • 好的。该语言是 django 模板,我将变量传递给模板,然后对其进行迭代。在这种情况下,迭代变得相当困难,因为我不知道如何访问 django 模板中的元素。
【解决方案2】:

你应该试试

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

【讨论】:

  • 谢谢,但是如何从模板标签访问它?我试过{% for a in location_map_india %}&lt;option value="{{ a.key }}" &gt;{{ a.value }}&lt;/option&gt;{% endfor %}
【解决方案3】:

如果您使用的字典必须有任何顺序,则说明您使用的数据结构不正确。

尝试使用列表或元组。

【讨论】:

    【解决方案4】:

    如果您使用的是 python 2.7 或更高版本,请查看OrderedDict。使用它可能会解决您的问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2017-01-03
      • 2019-10-04
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多