如果子发布者共享一个共同的价值观,如何合并它们?

2024-04-20 14:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有他们自己的子列表填充子列表。如果子列表在索引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']
    ]]

Tags: 列表fffphonebananapearccc香蕉sign
1条回答
网友
1楼 · 发布于 2024-04-20 14:16:36

你能试试这个吗?你知道吗

我假设在您的样本l中,在'FFF'前面有'Sublist2'。你知道吗

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

相关问题 更多 >