我有一个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()
转到所有这些只是为了对列表进行排序!
答案 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']]