列表字典:排序列表并维护相对索引位置

时间:2014-07-29 21:27:58

标签: list sorting python-3.x dictionary

我有一个列表的OrderedDict,例如:

data = OrderedDict([('a', [3, 2, 1]]), ('b', [z, y, x])])

我想按数据对这两个列表进行排序[' a']。结果如下:

OrderedDict([('a', [1, 2, 3]]), ('b', [x, y, z])])

其中元素在所有列表中维护相对索引位置。

我可以通过跟踪索引来实现:

sorted_data = sorted([(t, i) for t, i in zip(data['a'],range(len(data['a'])))])

但这需要另一个循环来整理其他列。缩短此示例 - 还有更多字典条目。是否有更多的Pythonic方法,比如operator.itemgetter?

感谢。

1 个答案:

答案 0 :(得分:0)

我现在将采取自己的答案,直到某人提交更精致的内容。这是我的解决方案,但看起来很笨重:

sortedData = sorted([(t, i) for t, i in zip(data['a'],range(len(data['a'])))])
sortedIndex = [i[1] for i in sortedData]
for key in data.keys():
    data[key] = [ data[key][i] for i in sortedIndex]