Python:如何查找重复项并求和它们的值?

Python:如何查找重复项并求和它们的值?,python,list,python-3.x,Python,List,Python 3.x,例如,我有上面的元组列表,如何找到重复的元组(即“Visa”)并求和它们的值(即980.5+215.0)?输出应为: [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)] 使用字典: [('Visa', 1195.5), ('Rogers', 61.5)] 使用字典: [('Visa', 1195.5), ('Rogers', 61.5)] 如果你想保持列表的顺序,那么我建议使用字典 data = [('Visa', 980.5), ('

例如,我有上面的元组列表,如何找到重复的元组(即“Visa”)并求和它们的值(即980.5+215.0)?输出应为:

[('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
使用字典:

[('Visa', 1195.5), ('Rogers', 61.5)]
使用字典:

[('Visa', 1195.5), ('Rogers', 61.5)]

如果你想保持列表的顺序,那么我建议使用字典

data = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
sum = {}
for item in data:
    if not item[0] in sum:
          sum[ item[0] ] = 0
    sum[ item[0] ] += item[1]
print sum.items()

如果你想保持列表的顺序,那么我建议使用字典

data = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
sum = {}
for item in data:
    if not item[0] in sum:
          sum[ item[0] ] = 0
    sum[ item[0] ] += item[1]
print sum.items()

使用集合:

lst = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

lst2 = [(tup[0], sum([val for n, val in lst if n == tup[0]])) for tup in lst]

res = []
for tup in lst2:
    if tup not in res:
        res.append(tup)

print(res)
li=[('Rogers', 10), ('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
s=set([i[0] for i in li])

x=[]
for i in s:
    sum=0
    for j in li:    
        if i == j[0]:
            sum+=j[1]
    x.append(sum)

final_list=zip(s,x)
print final_list
输出:

lst = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

lst2 = [(tup[0], sum([val for n, val in lst if n == tup[0]])) for tup in lst]

res = []
for tup in lst2:
    if tup not in res:
        res.append(tup)

print(res)
li=[('Rogers', 10), ('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
s=set([i[0] for i in li])

x=[]
for i in s:
    sum=0
    for j in li:    
        if i == j[0]:
            sum+=j[1]
    x.append(sum)

final_list=zip(s,x)
print final_list

使用集合:

lst = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

lst2 = [(tup[0], sum([val for n, val in lst if n == tup[0]])) for tup in lst]

res = []
for tup in lst2:
    if tup not in res:
        res.append(tup)

print(res)
li=[('Rogers', 10), ('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
s=set([i[0] for i in li])

x=[]
for i in s:
    sum=0
    for j in li:    
        if i == j[0]:
            sum+=j[1]
    x.append(sum)

final_list=zip(s,x)
print final_list
输出:

lst = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

lst2 = [(tup[0], sum([val for n, val in lst if n == tup[0]])) for tup in lst]

res = []
for tup in lst2:
    if tup not in res:
        res.append(tup)

print(res)
li=[('Rogers', 10), ('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
s=set([i[0] for i in li])

x=[]
for i in s:
    sum=0
    for j in li:    
        if i == j[0]:
            sum+=j[1]
    x.append(sum)

final_list=zip(s,x)
print final_list

看来大家都忘了:


看来大家都忘了:


A
collections.defaultdict
将是最有效的方法:

from collections import Counter


c = Counter()
for card, val in lst:
    c.update({card: val})    
print(list(c.items()))

# [('Visa', 1195.5), ('Rogers', 61.5)]
输出:

from collections import defaultdict

l= [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

d = defaultdict(float)
for k,v in l:
    d[k] += v
defaultdict(,{'Visa':1195.5,'Rogers':61.5})

A
collections.defaultdict
将是最有效的方法:

from collections import Counter


c = Counter()
for card, val in lst:
    c.update({card: val})    
print(list(c.items()))

# [('Visa', 1195.5), ('Rogers', 61.5)]
输出:

from collections import defaultdict

l= [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]

d = defaultdict(float)
for k,v in l:
    d[k] += v
defaultdict(,{'Visa':1195.5,'Rogers':61.5})

要添加到这个答案中,如果不需要打印,那么
列表(sum.items())
就可以了。(
sum.items()。(
sum.items()。