在python中按另一个列表排序多维列表

时间:2013-12-10 10:00:18

标签: python list

我有这样的名单。

首先:(苹果,榴莲,樱桃,鸡蛋,香蕉)

第二:((banana,b1,b2,b3,b4),           (榴莲,D1,D2,D3,D4),           (苹果,A1,A2,A3,A4),           (鸡蛋,E1,E2,E3,E4)           (樱桃,C1,C2,C3,C4))

我想使用第一个列表排列第二个列表。 所以我期待这一点。

     ((apple,a1,a2,a3,a4),
      (durian,d1,d2,d3,d4),
      (cherry,c1,c2,c3,c4),
      (egg,e1,e2,e3,e4),
      (banana,b1,b2,b3,b4))

请让我知道如何做到这一点。 感谢。

3 个答案:

答案 0 :(得分:3)

首先 - 那些是元组,其次你提供的所有样本实际上都不是字符串,所以我为你做了。

现在让我们先将其转换为字典:

data = [('banana','b1','b2','b3','b4'),
        ('durian','d1','d2','d3','d4'),
        ('apple','a1','a2','a3','a4'),
        ('egg','e1','e2','e3','e4'),
        ('cherry','c1','c2','c3','c4')]

data = {t[0]:t for t in data}  # make dictionary with dictionary comprehension.

我们没有选择器:

selector = ['apple', 'durian', 'cherry', 'egg', 'banana']

然后我们订购并创建列表:

results = [data[key] for key in selector]  # order result by selector

<强>答案:

[('apple', 'a1', 'a2', 'a3', 'a4'), 
 ('durian', 'd1', 'd2', 'd3', 'd4'), 
 ('cherry', 'c1', 'c2', 'c3', 'c4'), 
 ('egg', 'e1', 'e2', 'e3', 'e4'), 
 ('banana', 'b1', 'b2', 'b3', 'b4')]

答案 1 :(得分:1)

使用字典怎么样?你可以试试这个:

# first : (apple, durian, cherry, egg, banana)
# second : ((banana,b1,b2,b3,b4), (durian,d1,d2,d3,d4), (apple,a1,a2,a3,a4), (egg,e1,e2,e3,e4), (cherry,c1,c2,c3,c4))

d = {}
for lst in second:
    d[lst[0]] = lst

result = []
for item in first:
    # you shall ensure that key `item` exists in `d`
    result.append(d[item])

答案 2 :(得分:0)

In [25]: d = {L[0]:list(L[1:]) for L in second}

In [26]: answer = [[k]+d[k] for k in first]

In [27]: answer
Out[27]: 
[['apple', 'a1', 'a2', 'a3', 'a4'],
 ['durian', 'd1', 'd2', 'd3', 'd4'],
 ['cherry', 'c1', 'c2', 'c3', 'c4'],
 ['egg', 'e1', 'e2', 'e3', 'e4'],
 ['banana', 'b1', 'b2', 'b3', 'b4']]