将两个列表与重复键对齐

时间:2014-11-20 01:02:07

标签: python list alignment

此问题类似于“在python中对齐列表”问题,但由于潜在密钥的重复数字,我在使用字典时遇到问题。

这是一个例子。从这两个列表开始:

如果我使用字典,这些就是键。 [5,6,6,1,6,1,6,1,1,2,1,2,1,2,2,1]

[13,14,15,10,16,11,17,12,12,13,13,14,14,15,16,17]

我可以按照我想要的方式重新排列第一个列表,即:

[5,6,6,6,6,1,1,1,1,1,1,2,2,2,2,1]

我希望第二个列表与第一个列表保持一致,并且看起来完全像这样: [13,14,15,16,17,10,11,12,12,13,14,13,14,15,16,17]

请注意,重要的是潜在键列表的重复值按位置与第二个列表中的相应值对齐。

1 个答案:

答案 0 :(得分:0)

与您帖子下方的其他人一样,我并不完全理解您的问题(您是否可以更具体地了解您想要获得的关系?),但也许zip可以解答您的问题:

>>> a = [5,6,6,6,6,1,1,1,1,1,1,2,2,2,2,1]
>>> b = [13,14,15,16,17,10,11,12,12,13,14,13,14,15,16,17]
>>> alignment = zip(a, b)
>>> alignment
[(5, 13), (6, 14), (6, 15), (6, 16), (6, 17), (1, 10), (1, 11), (1, 12), (1, 12), (1, 13), (1, 14), (2, 13), (2, 14), (2, 15), (2, 16), (1, 17)]

已修改

key_list = [5,6,6,1,6,1,6,1,1,2,1,2,1,2,2,1]
values_list = [13,14,15,10,16,11,17,12,12,13,13,14,14,15,16,17]
zipped_lists = zip(key_list, values_list)
sorted_zip = sorted(zipped_lists)
pattern = [5,6,6,6,6,1,1,1,1,1,1,2,2,2,2,1]
temp_dict = {}
for key, value in sorted_zip:
    if key not in temp_dict:
        temp_dict[key] = [value]
    else:
        temp_dict[key].append(value)

final_list = []
for i in pattern:
    final_list.append((i, temp_dict[i].pop(0)))

当然,final_list是你的结果。