Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 - Fatal编程技术网

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

Python 如何合并列表列表中的项目,python,Python,如何合并索引[0]中具有相同值的列表 [['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]] 我的问题仍然存在,但我将重新措辞。如何在索引[0]处合并具有相同元素的多个列表项,并从它们各自的索引位置添加整数 例如,我期望的最终结果是: [['Vienna', 4, 40, 2], ['London', 4, 11, 1]] 如果从列表列表开始,则可以在中读取子列表时执行合并。如果字典中存在该键,则通过对列表中的元素与

如何合并索引[0]中具有相同值的列表

[['Vienna', 3, 42, 0], ['London', 4, 11, 1], ['Vienna', 1, 8, 2]]
我的问题仍然存在,但我将重新措辞。如何在
索引[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]}
如果希望以列表列表结束,可以处理结果dict中的
.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)
        

下面是我编辑过的答案,对不起,我误解了预期的输出

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)
输出:

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

没有像字典这样有重复键的东西,只有一个会保持,另一个会被覆盖/丢弃。如何填充/创建此词典?这将是你的机会合并,因为它是一个列表,而不是一本字典。我试着把它编入字典,意识到我不经意间写了一些数据。该列表是一个列表列表,看起来像:[[Vienna',2,38,0],[London',4,11,1]]列表中的项目数是否总是4?@CoryKramer嘿,谢谢你的回复。我通过编写for循环来更新一个空字典来填充字典。我没有意识到,每次我用重复的键更新字典时,它都会覆盖以前的键/值对。原始数据结构是列表的列表。@JohnnyMopp是的,每个列表中的项目数始终为4。一个字符串后跟3个整数我认为您的解决方案不必要太复杂,嵌套太多。但好的尝试这很好,
idx
代表什么?预期的输出是列表的列表tho@Dragonborn这篇文章在这方面来来回回,但如果他们真的想用myDict.items()[[k]+v for k,v in myDict.items()][/code>中的最终dict来结束一个微不足道的列表列表,请参见上面的编辑尽管我不是下一个投票人,但我相信这是因为在合并过程中也必须对值进行求和。请参见OP问题中的:
添加来自各自索引位置的整数