工作,我有这2所列出输入:合并功能将只有序列表
list1 = [['A', 14, 'I', 10, 20], ['B', 15, 'S', 30, 40], ['C', 16, 'F', 50, 60]]
list2 = [['A', 14, 'Y', 0, 200], ['B', 15, 'M', 0, 400], ['C', 17, 'G', 0, 600]]
和我希望的输出是这样的:
finalList = [['A', 14, 'Y', 10, 200], ['B', 15, 'M', 30, 400], ['C', 16, 'F', 50, 60],['C', 17, 'G', 0, 600]]
使用此功能:
def custom_merge(list1, list2):
finalList = []
for sub1, sub2 in zip(list1, list2):
if sub1[1]==sub2[1]:
out = sub1.copy()
out[2] = sub2[2]
out[4] = sub2[4]
finalList.append(out)
else:
finalList.append(sub1)
finalList.append(sub2)
return finalList
我会得到我想要的输出,但如果我切换位置(list2 [1]和list2 [2])和我的列表2:
list2 = [['A', 14, 'Y', 0, 200], ['C', 17, 'G', 0, 600], ['B', 15, 'M', 0, 400]]
那么输出将是这样的:
[['A', 14, 'Y', 10, 200], ['B', 15, 'S', 30, 40], ['C', 17, 'G', 0, 600], ['C', 16, 'F', 50, 60], ['B', 15, 'M', 0, 400]]
(注意额外[ 'B',15, 'M',0,400])
我有什么修改我的函数为了获得我的第一个期望的输出,如果我的列表在我的列表中有不同的顺序!?我使用python 3.谢谢!
以后编辑:
合并规则: 当list1[listindex][1] == list2[listindex][1]
(例如:当14==14
),取代list1
- >list2[2]
和list2[4]
(例如: 'Y' 和200),如果不只是添加从无与伦比的列表list2
到list1
,因为它是(像我期望的输出),并保持这种不匹配是在列表1中的人(例如:['C', 16, 'F', 50, 60]
)
要注意的是,列表1和List2可以有不同的LEN(列表1罐比列表2有更多的列表,反之亦然)
EDIT.2 我发现这一点:
def combine(list1,list2):
combined_list = list1 + list2
final_dict = {tuple(i[:2]):tuple(i[2:]) for i in combined_list}
merged_list = [list(k) + list (final_dict[k]) for k in final_dict]
return merged_list
^^可以工作,还在测试!
不知道什么是这里的合并逻辑。 –
在我的原始文章中添加了合并规则。 –