python - 带解包字典的累加器模式
问题描述
我有一本字典,上面列出了它赢得的国家和金牌。我在那里两次添加了国家智利,看看我是否可以合并一个累加器模式。智利在字典中的值是 13 和 122。
出于某种原因,当我运行我的代码时,chile_golds 的输出是 122 而不是 135。有人能告诉我我的代码哪里出错了吗?我想总结一下For Loop在字典中遇到“智利”时的奖牌数量。
非常感谢。
total_golds = {"Italy": 114, "Germany": 782, "Pakistan": 10, "Sweden": 627, "USA": 2681, "Zimbabwe": 8, "Greece": 111, "Mongolia": 24, "Brazil": 108, "Croatia": 34, "Algeria": 15, "Switzerland": 323, "Yugoslavia": 87, "China": 526, "Egypt": 26, "Norway": 477, "Spain": 133, "Australia": 480, "Slovakia": 29, "Canada": 22, "New Zealand": 100, "Denmark": 180, "Chile": 13, "Argentina": 70, "Thailand": 24, "Cuba": 209, "Uganda": 7, "England": 806, "Denmark": 180, "Chile": 122, "Bahamas": 12}
chile_golds = 0
for k,v in total_golds.items():
if k == "Chile":
chile_golds = chile_golds + v
print(chile_golds)
实际输出:122 预期输出:135
解决方案
在 Python 中,字典不应该有多个键(示例中的“智利”)。在这种情况下,只有一个条目存储在total_golds
变量中。应改为使用其他数据结构。通常可以使用元组列表:
total_golds = [("Italy", 114), ... ]
另一种可能性是使用字典列表。然后使用Counter
fromcollections
使您的任务变得微不足道,因为“累加器模式”是sum
函数的一部分:
>>> from collections import Counter
>>> total_golds = [{"Italy": 114}, {"Chile": 122}, {"Chile": 13}]
>>> counted = sum([Counter(chunk) for chunk in total_golds], Counter())
>>> print(counted["Chile"])
135
决定使用哪种数据结构通常取决于流行的操作。字典允许通过键快速检索值。当需要一个一个地遍历序列时,项目列表可能会更好。
在上面,列表推导可以被生成器表达式替换:
counted = sum((Counter(chunk) for chunk in total_golds), Counter())
推荐阅读
- spring - Spring Cloud Gateway - 从除一个以外的所有路由中删除请求标头
- java - 我的方法不是为班级定义的吗?
- sapb1 - SDK中SAP B1的HEM1表的字段缺席类型的名称是什么?
- javascript - 固定链接自动填充复选框
- javascript - 如何使用 Jest __mocks__ 在 monorepo 中模拟 react-router-dom
- google-sheets - 用于从谷歌表格中的特定单元格导出值的 url
- r - R 闪亮 | 链接输入选择以对数据框进行分组
- scala - 基于预定义配置参数的组合编写简洁的 sbt 配置
- python - 查找从 f(x) 到原点的最短距离的程序
- python - 使用 Python 的刽子手。(版本:3.9.1)