Python 仅当子列表共享一个公共值时,如何组合子列表?
我有自己的子列表填充的子列表。如果子列表在索引1处共享一个公共值,那么我希望通过合并/组合子列表中的项来创建一个子列表,从而将两个子列表合并为一个子列表Python 仅当子列表共享一个公共值时,如何组合子列表?,python,list,sublist,Python,List,Sublist,我有自己的子列表填充的子列表。如果子列表在索引1处共享一个公共值,那么我希望通过合并/组合子列表中的项来创建一个子列表,从而将两个子列表合并为一个子列表 l = [[ ['Sublist1','AAA','10','Apple,Pear,Banana'], ['Sublist1','AAA','50','Peach,Orange,Banana'], ['Sublist1','DDD','3','Bike,Street'] ],[
l = [[
['Sublist1','AAA','10','Apple,Pear,Banana'],
['Sublist1','AAA','50','Peach,Orange,Banana'],
['Sublist1','DDD','3','Bike,Street']
],[
['Sublist2','CCC','50','Tomator,Lemmon'],
['Sublist2','EEE','30','Phone,Sign'],
['Sublist2','CCC','90','Strawberry'],
['Sublist2','FFF','30','Phone,Sign']
],[
['Sublist3','BBB','100','Tomator,Lemmon'],
['Sublist3','BBB','100','Pear'],
['Sublist3','FFF','90','Strawberry'],
['Sublist3','FFF','50','']
]]
例如,如果子列表在索引1处共享AAA,则组合索引2和3处的项目。在这种情况下,10和50将变成“10,50”,“苹果,梨,香蕉”和“桃,橙,香蕉”将变成“苹果,梨,香蕉,桃,橙,香蕉”
Desired_Result = [[
['Sublist1','AAA','10,50','Apple,Pear,Banana,Peach,Orange'],
['Sublist1','DDD','3','Bike,Street']
],[
['Sublist2','CCC','50,90','Tomator,Lemmon,Strawberry'],
['Sublist2','EEE','30','Phone,Sign'],
['Sublist2','FFF','30','Phone,Sign']
],[
['Sublist3','BBB','100,100','Tomator,Lemmon,Pear'],
['Sublist3','FFF','90,50','Strawberry']
]]
你能试试这个吗
我假设在你的样本l中“FFF”前面有“Sublist2”
对于如此具体的事情,确实没有正确的答案。有很多方法可以实现这一点。我建议去绘图板,拿出一些算法,选择最好的一个,并将其发布到CodeReview进行反馈。它必须在相同的索引上吗?您可以将子列表设置为,然后使用.intersection查看它们的共同点。但是sets会删除订单,['FFF','30','Phone,Sign']是故意丢失子列表2的吗?不,这是个意外..很抱歉
def merge(lst):
def j(sq):
return ",".join(sq)
def m(sl):
dic = {}
for ssl in sl:
k = tuple(ssl[0:2])
try:
v = dic[k]
except KeyError:
dic[k] = v = (set(), set())
v[0].update( set(ssl[2].split(',')) )
v[0].discard('')
v[1].update( set(ssl[3].split(',')) )
v[1].discard('')
return [ list(k) + [j(v[0])] + [j(v[1])] for k, v in sorted(dic.iteritems()) ]
return [ m(sl) for sl in lst ]
for sl in merge(l):
print sl