Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅当子列表共享一个公共值时,如何组合子列表?_Python_List_Sublist - Fatal编程技术网

Python 仅当子列表共享一个公共值时,如何组合子列表?

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'] ],[

我有自己的子列表填充的子列表。如果子列表在索引1处共享一个公共值,那么我希望通过合并/组合子列表中的项来创建一个子列表,从而将两个子列表合并为一个子列表

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