在Python中汇总列表-在一个元组和另一个列表中

时间:2019-01-07 07:01:17

标签: python list loops tuples

不确定是不是dup-如果是则将删除,只是在此特定情况下找不到。我有一个包含元组的复杂列表,其中包含字符串和列表。

我需要用int值替换最深的列表,这些值是这些列表的总和。我尝试了六个循环组合来解决它-似乎没有任何效果。

[('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]

需要成为:

[('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]

这样我就可以返回按汇总列表值排序的新列表组合。

7 个答案:

答案 0 :(得分:8)

您可以通过以下方式进行简洁,易懂的理解:

[(abbr, sum(t)) for abbr, t in l]

结果:

[('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]

答案 1 :(得分:1)

使用map

例如:

lst = [('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]
print(list(map(lambda x: (x[0], sum(x[1])), lst)))

list comprehension

例如:

print([(i[0], sum(i[1])) for i in lst])

输出:

[('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]

答案 2 :(得分:1)

oldlst = [('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]

newlst = list([(i[0], sum(i[1])) for i in oldlst])

选中here

答案 3 :(得分:1)

让我们使用列表推导来解决它-

myList = [('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]
myList_out = [(i[0],sum(i[1])) for i in myList]
myList_out
    [('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]

答案 4 :(得分:0)

通过使用collections.defaultdict.

from collections import defaultdict
xList = [('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]
testDict = defaultdict(int)
for key, val in xList:           
        testDict[key] = val[0] + val[1]

print(testDict.items())

输出: out

答案 5 :(得分:0)

lst = [('MED', [1, 1]),('COP', [3, 1]),('GRO', [1, 5]),('RRE', [5, 3]),('PRO', [4, 6])]

print [(text, sum(num)) for text, num in lst]

结果:

[('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]

答案 6 :(得分:0)

尝试一下:

l1 = [('MED', [1, 1]), ('COP', [3, 1]), ('GRO', [1, 5]), ('RRE', [5, 3]), ('PRO', [4, 6])]

mod_l1 = [(abbr, sum(t)) for abbr, t in l1]

required_l1 = sorted(mod_l1, key=lambda order: order[1])

结果:

[('MED', 2), ('COP', 4), ('GRO', 6), ('RRE', 8), ('PRO', 10)]