如何在嵌套元组中找到总和

问题描述

编写一个python程序来定义一个元组,以接受3种食品 详细信息,例如产品名称及其价格和有效期 子元组,然后查找所有产品的价格总和 具有相同的到期日期。

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

然后,输出应该像

TOTAL PRICE:760
t=(('CAKE','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,('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的答案,但是我要添加另一个答案,以便还显示如何将每个数据项直接解压缩到相关变量中(price和{ {1}})。这里的date是一个将包含描述的变量(例如_),但是由于我们此处未使用该值,因此我将常规名称用作虚拟变量,而不是将其称为{{1 }}。

使用'CAKE',字典中的元素在首次引用时会自动创建为浮点零。

name

礼物:

defaultdict(float)

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


更新:您还询问了如何不使用from collections import defaultdict t = (('CAKE','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