按键列表对字典进行排序

Posted

技术标签:

【中文标题】按键列表对字典进行排序【英文标题】: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 【参考方案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']

【讨论】:

以上是关于按键列表对字典进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python 字典按键值排序

python 字典按键值排序

如何对字典按键值大小进行排序

如何按键对字典进行排序

python按自定义顺序排序字典列表[重复]

如何在 Python 中按键对字典进行排序