列表字典:对列表进行排序并保持相对索引位置



我有一个OrderedDict列表,例如:

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

我想按data['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'])))])

,但这需要另一个循环来排序其他列。这个例子被缩短了——有更多的字典条目。是否有更python化的方法,比如使用operator.itemgetter?

谢谢。

在有人提交更完善的答案之前,我先接受我自己的答案。这是我的解决方案,但看起来很笨拙:

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]

最新更新