Python 如何合并列表列表中的项目
如何合并索引[0]中具有相同值的列表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]] 如果从列表列表开始,则可以在中读取子列表时执行合并。如果字典中存在该键,则通过对列表中的元素与
[['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问题中的:添加来自各自索引位置的整数