根据另一个数组重新排序

时间:2018-05-03 10:35:20

标签: python arrays python-2.7

我有一系列的词组,其中包含键nameval。 我有另一个数组数组,其中总有两个值:src_XXdst_XX其中XX是整数。

我想使用name对第一个dicts数组进行排序,并在另一个数组(数组)中对其值进行排序

s = [{'name': 'src_0', 'val': 0},
     {'name': 'src_1', 'val': 1},
     {'name': 'src_2', 'val': 2},
     {'name': 'src_3', 'val': 3},
     {'name': 'src_4', 'val': 4},
     {'name': 'src_5', 'val': 5},]
u= [['src_1', 'dst_2'],
     ['src_0', 'dst_0'],
     ['dst_1', 'src_2'],
     ['dst_3', 'src_3'],
     ['src_4', 'dst_4'],
     ['src_5', 'dst_5'],] 

最终结果应为:

s = [{'name': 'src_1', 'val': 1},
     {'name': 'src_0', 'val': 0},
     {'name': 'src_2', 'val': 2},
     {'name': 'src_3', 'val': 3},
     {'name': 'src_4', 'val': 4},
     {'name': 'src_5', 'val': 5},]

我已经尝试了很多东西,其中一个正在运行,但它非常难看,没有优化而且不像Python那样。

1 个答案:

答案 0 :(得分:2)

首先,我将使用它创建一个更简单的引用数组:

reference = [sorted(x)[1] for x in u]

>>> ['src_1', 'src_0', 'src_2', 'src_3', 'src_4', 'src_5']

然后像这样排序s

s.sort(key=lambda x: reference.index(x['name']))

>>> [{'name': 'src_1', 'val': 1},
     {'name': 'src_0', 'val': 0},
     {'name': 'src_2', 'val': 2},
     {'name': 'src_3', 'val': 3},
     {'name': 'src_4', 'val': 4},
     {'name': 'src_5', 'val': 5}]