Python 如何在嵌套元组中查找和
编写一个python程序来定义一个元组来接受3种食品 产品名称、价格和有效期等详细信息 子元组,然后找到所有 具有相同的到期日 然后,输出应该是Python 如何在嵌套元组中查找和,python,tuples,swap,Python,Tuples,Swap,编写一个python程序来定义一个元组来接受3种食品 产品名称、价格和有效期等详细信息 子元组,然后找到所有 具有相同的到期日 然后,输出应该是 TOTAL PRICE:760 如何解决???类似的问题 from collections import defaultdict t=(('CAKE', (748.0, '07-09-2020')), ('JELLY', (12.0, '07-09-2020')), ('CREAM', (244.0, '03-11-2020'))) data =
TOTAL PRICE:760
如何解决???类似的问题
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(,{'07-09-2020':760.0,'03-11-2020':244.0})
您已经有了另一个基于defaultdict
的答案,但我添加了另一个答案是为了说明如何将每个数据项直接解压缩到相关变量中(price
和date
)。这里的\uuu
是一个包含描述的变量(例如'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
欢迎来到堆栈溢出。请参加参观()并阅读如何提问()。当你提问时,请说明你试图解决的问题。不使用默认dict就可以解决吗?@Sush是的,当然,你可以使用普通字典并显式测试密钥是否存在。我将添加以向您展示如何做到这一点。@Sush现在添加了一个更新以显示您可以做什么,而不是使用
defaultdict
。我的代码中是否有任何需要更正的更改?存在各种问题—(1)您试图使用一个变量total
,该变量只包含一个数字,但每个日期都有单独的总计,(2)count
不起作用,因为它查找与您正在搜索的内容相等的元素,而您对嵌套在单个元素中的内容感兴趣,(3)我不确定c>1
测试的目的是什么(如果正好有一个呢)?我认为使用字典进行计数是您需要的方法,因此很抱歉不能提供一个更接近于现有代码的解决方案。
07-09-2020 760.0
03-11-2020 244.0
totals = {}
for _, (price, date) in t:
if date not in totals:
totals[date] = 0.
totals[date] += price