此问题类似于“在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]
请注意,重要的是潜在键列表的重复值按位置与第二个列表中的相应值对齐。
答案 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是你的结果。