是否有一种简单的方法可以按给定列表对字典进行排序?
示例:
data = OrderedDict([('pi', 'var1'), ('pa', 'var2'), ('pu', 'var3')])
order = ['pu', 'pi', 'pa']
请求有序词典:
>>> OrderedDict([('pu', 'var3'), ('pi', 'var1'), ('pa', 'var2')])
提前致谢
答案 0 :(得分:7)
您可以使用以下生成器理解来执行此操作:
sorted_data = OrderedDict((k, data[k]) for k in order)
答案 1 :(得分:3)
对lambda t: order.index(t[0])
中的key
参数使用lambda函数(OrderedDict
)是一种方法:
In [1]: from collections import OrderedDict
In [2]: order = ['pu', 'pi', 'pa']
In [3]: data = OrderedDict([('pi', 'var1'), ('pa', 'var2'), ('pu', 'var3')])
In [4]: OrderedDict(sorted(data.items(), key=lambda t: order.index(t[0])))
Out[4]: OrderedDict([('pu', 'var3'), ('pi', 'var1'), ('pa', 'var2')])
文档 - https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes
答案 2 :(得分:0)
>>> import itertools
>>> from collections import OrderedDict
>>> counter = itertools.count()
>>> input = [('pi', 'var1'), ('pa', 'var2'), ('pu', 'var3')]
>>> order = {key: counter.next() for key in ['pu', 'pi', 'pa']}
>>> OrderedDict(sorted(input, key=lambda pair: order[pair[0]]))
OrderedDict([('pu', 'var3'), ('pi', 'var1'), ('pa', 'var2')])