构建字典值列表,按键排序

时间:2016-04-14 22:03:02

标签: python sorting dictionary

我有一个python字典,看起来像这样:

attributes = {
    'size': ['s','m','l'],
    'color': ['black', 'orange'],
}

我想获得一个值列表。如果我使用values(),我会得到:

>>> attributes.values()
[['black', 'orange'], ['s', 'm', 'l']]

但是,我希望生成的列表列表按字典键按相反的顺序排序 - 即大小,然后是颜色,而不是颜色,然后是大小。我想要这个:

[['s', 'm', 'l'], ['black', 'orange']]

我不会事先知道字典键是什么,但我总是知道我是按字母顺序还是按字母顺序排列。

是否有一些pythonic方法可以做到这一点?

我唯一能想到的就是......不是很像python:

keys = sorted(attributes.keys(), reverse=True)
result = []
for key in keys:
    result.append(attributes[key])

很难从attributes.values()转到所有这些只是为了对列表进行排序!

2 个答案:

答案 0 :(得分:10)

此代码:

keys = sorted(attributes.keys(), reverse=True)
result = []
for key in keys:
    result.append(attributes[key])

基本上是发明列表推导的用例:

result = [attributes[key] for key in sorted(attributes.keys(), reverse=True)]

答案 1 :(得分:2)

最简单的方法是使用OrderedDict,它会记住元素的插入顺序:

import collections

result = collections.OrderedDict(sorted(attributes.items(), reverse=True))

>>> result.values()
[['s', 'm', 'l'], ['black', 'orange']]