如何在嵌套元组中求和

how to find the sum in a nested tuple

Write a python program to define a tuple to accept 3 food product details such as Products name with their Price and Expiry date in a sub tuple, then find the sum of price of all products which are having same expiry date.

t=(('CAKE', (748.0, '07-09-2020')), ('JELLY', (12.0, '07-09-2020')), ('CREAM', (244.0, '03-11-2020')))

那么,输出应该是这样的

TOTAL PRICE:760
t=(('CAKE', (748.0, '07-09-2020')), ('JELLY', (12.0, '07-09-2020')), ('CREAM', (244.0, '03-11-2020')))
l=list(t);total=0
for i in range(0,len(l)):
    check=l[i][1][1]
    c=l.count(check)
    if c>1:
        total+=l[i][1][0]
print(total)

如何解决??

类似

from collections import defaultdict

t=(('CAKE', (748.0, '07-09-2020')), ('JELLY', (12.0, '07-09-2020')), ('CREAM', (244.0, '03-11-2020')))

data = defaultdict(int)
for entry in t:
        data[entry[1][1]] += entry[1][0]
print(data)

输出

defaultdict(<class 'int'>, {'07-09-2020': 760.0, '03-11-2020': 244.0})

您已经有另一个基于 defaultdict 的答案,但我要添加另一个答案也是为了展示如何将每个数据项直接解压缩到相关变量中(pricedate)。这里的 _ 是一个包含描述的变量(例如 'CAKE'),但是因为我们没有在这里使用该值,所以我使用虚拟变量的常规名称而不是调用它 name 或其他什么。

使用 defaultdict(float),字典的元素在首次引用时自动创建为浮点零。

from collections import defaultdict

t = (('CAKE', (748.0, '07-09-2020')),
     ('JELLY', (12.0, '07-09-2020')),
     ('CREAM', (244.0, '03-11-2020')))

totals = defaultdict(float)
for _, (price, date) in t:
    totals[date] += price

for date in totals:
    print(f'{date} {totals[date]}')

给出:

07-09-2020 760.0
03-11-2020 244.0

请注意,根据您的 python 版本,输出中的日期顺序可能会有所不同。


更新: 你还问了如何在不使用 defaultdict 的情况下完成——像这样:

totals = {}
for _, (price, date) in t:
    if date not in totals:
        totals[date] = 0.
    totals[date] += price