【问题标题】:sort dict by key list按键列表对字典进行排序
【发布时间】:2014-02-11 04:21:24
【问题描述】:

我有这个:

order = [
    'foo',
    'bar',
    'baz',
]
data = {
    'bar': 'barValue',
    'foo': 'fooValue',
    'baz': 'bazValue',
}

我想最后拥有这个:

sorted_data = [
    'fooValue',
    'barValue',
    'bazValue',
]

所以,我有一个带有键值对的 dict,我有一个列表,其中包含该 dict 中按某种顺序排列的键。我想得到一个字典值的列表,按它们在列表中指定的顺序排序。

我需要这个,因为不幸的是 Django 在模板中不支持像这样简单的东西:

{% for key in order %}
    <div>{{ data[key] }}</div>
{% endfor %}

【问题讨论】:

  • 这不叫sorting

标签: python django python-2.7 django-templates


【解决方案1】:

这里有一个非常简单的单行,它是这样的

Python 2.7 版本

>>> map(data.get, order)
['fooValue', 'barValue', 'bazValue']

Python 3.x 版本

>>> list(map(data.get, order))
['fooValue', 'barValue', 'bazValue']

【讨论】:

    【解决方案2】:

    尝试使用列表理解:

    sorted_data = [data[a_data] for a_data in order]
    

    【讨论】:

      【解决方案3】:

      使用列表推导:

      >>> order = [
          'foo',
          'bar',
          'baz',
      ]
      data = {
          'bar': 'barValue',
          'foo': 'fooValue',
          'baz': 'bazValue',
      }
      >>>                         
      >>> [data[o] for o in order]
      ['fooValue', 'barValue', 'bazValue']
      

      【讨论】:

        猜你喜欢
        • 2019-12-30
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多