我有一本词典,其中列出了国家/地区列表和它所获得的金牌。我在该国家添加了两次智利,以查看是否可以合并累加器模式。智利词典中的值分别为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
答案 0 :(得分:2)
在Python中,字典不应该具有多个键(在示例中为“智利”)。在这种情况下,total_golds
变量中仅存储一个条目。应该改用其他数据结构。通常可以使用元组列表:
total_golds = [("Italy", 114), ... ]
另一种可能性是使用字典列表。然后使用Counter
中的collections
使您的任务变得微不足道,因为“累加器模式”是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())
答案 1 :(得分:1)
如果您想保留dict
结构,请使用collections.Counter
:
from collections import Counter
d = Counter({'Chile': 3})
d.update(Chile=10)
print(d)
输出
Counter({'Chile': 13})
与原始dict
不同,Counter.update
添加计数而不是替换计数。