在Python中按给定列表排序字典

时间:2014-08-25 19:33:57

标签: python list sorting dictionary

是否有一种简单的方法可以按给定列表对字典进行排序?

示例:

data = OrderedDict([('pi', 'var1'), ('pa', 'var2'), ('pu', 'var3')])
order = ['pu', 'pi', 'pa']

请求有序词典:

>>> OrderedDict([('pu', 'var3'), ('pi', 'var1'), ('pa', 'var2')])

提前致谢

3 个答案:

答案 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')])