如何在嵌套元组中求和
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
的答案,但我要添加另一个答案也是为了展示如何将每个数据项直接解压缩到相关变量中(price
和 date
)。这里的 _
是一个包含描述的变量(例如 '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
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
的答案,但我要添加另一个答案也是为了展示如何将每个数据项直接解压缩到相关变量中(price
和 date
)。这里的 _
是一个包含描述的变量(例如 '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