[英]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.