繁体   English   中英

如何合并列表列表中的项目

[英]How to merge items in a list of lists

如何合并在index[0]处具有相同值的列表

[['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]]

我的问题仍然存在,但我会改写它。 如何在index[0]处合并具有相同元素的多个列表项,并从它们各自的索引位置添加整数。

例如,我想要的最终结果是:

[['Vienna', 4, 40, 2], ['London', 4, 11, 1]]

如果您从列表列表开始,您可以在读取子列表时执行合并。如果键存在于您的字典中,则通过对现有列表在列表推导中按元素求和来执行合并。 如果不存在密钥,则直接存储新列表。

data = [['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]]
myDict = {}
for sub in data:
    key = sub[0]
    values = sub[1:]
    if key in myDict:
        myDict[key] = [i+j for i,j in zip(values, myDict[key])]
    else:
        myDict[key] = values

结果

>>> myDict
{'Vienna': [4, 50, 2], 'London': [4, 11, 1]}

如果您想以列表列表结尾,您可以从结果字典中处理.items()

>>> [[k] + v for k,v in myDict.items()]
[['Vienna', 4, 50, 2], ['London', 4, 11, 1]]

如果可能的话,这个还负责可变列表长度!

a = [['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]]
r = {}
final = []
for x in a:
    if x[0] not in r:
        r[x[0]] = x[1:]
    else:
        key = x[0]
        other = r[key]
        current = x[1:]
        output = []
        max_idx = max(len(other), len(current))
        for i in range(0,max_idx):
            left = 0
            try:
                left = current[i]
            except:
                pass
            right = 0
            try:
                right = other[i]
            except:
                pass
            output.append(left+right)
        r[key] = output

for key, item in r.items():
    final.append([key] + item)

print(final)
        

以下是我编辑的答案,对不起,我误解了预期的 output。

data= [['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]]

dup = {}
final = []

for item in data:
    if item[0] in dup.keys():
        dup[item[0]] = [i+j for i,j in zip(dup[item[0]], item[1:])]
    else:
        dup.update({item[0]:item[1:]})
        
for key, value in dup.items():
    final.append([key]+value)

print(final)

Output:

[['Vienna', 4, 50, 2], ['London', 4, 11, 1]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM