【问题标题】:Re-order based on another array基于另一个数组重新排序
【发布时间】:2018-05-03 10:35:19
【问题描述】:

我有一个字典数组,其中有键 nameval。 我有另一个 array 数组,其中总是有两个值: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。

【问题讨论】:

    标签: python arrays python-2.7


    【解决方案1】:

    首先我会使用这个创建一个更简单的引用数组:

    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}]
    

    【讨论】:

    • 这行得通!唯一的问题是我需要提取这些键两次:一次用于dst 字段,一次用于src(为了更简单,我的问题只是关于src)。我试图找到一种使用您的代码的方法并制作像ref_dst, ref_src = [a[0], a[1] for a in [sorted(x) for x in u]] 这样的单行代码,但这不起作用。有什么想法吗?
    • 我认为这是你想要的:ref_dst, ref_src = [[sorted(x)[y] for x in u] for y in [0, 1]]
    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多