【发布时间】:2021-10-27 23:01:52
【问题描述】:
编辑:在底部添加示例代码
我正在使用字典来跟踪给定键的两个值。例如,我想跟踪几个棒球运动员的球数和击球数。所以我有两个棒球运动员:
- 蒂姆
- 马克
所有统计数据都列在一个文本文件中,例如:
- 蒂姆罢工
- 蒂姆得到球
- 蒂姆罢工
- 马克得到球
等等等等。所以对于第一行,字典会这样(反映蒂姆罢工)。
stats = {'tim', [1, 0]}
然后他得到一个球:
stats = {'tim', [1, 1]}
然后又是一次罢工:
stats = {'tim', [2, 1]}
然后马克得到一个球:
stat = {'tim', [2, 1],
'mark', [0, 1]}
开始通过创建两个字典(一个用于罢工,一个用于球)来解决这个问题,但我遇到了两个问题:
-
当我尝试将来自罢工的价值附加到一名球员的球时,我遇到了错误:
TypeError: 'int' object is not iterable
我假设这意味着 append() 不适用于整数,但我不确定。我也尝试使用 str() 更改值,但遇到了同样的错误。
- 即使我能解决这个问题,我也需要在没有记录好击球或球时输入 0。
这是我目前拥有的通用代码:
#!/usr/bin/env python3
import re
strike = {}
ball = {}
with open("baseball_stats.txt", "r") as file:
for line in file:
player = re.search(r"^\s*([a-zA-Z]+)", line)
name = player.group(1)
if "strike" in line:
if name in strike:
strike[name] += 1
else:
strike[name] = 1
else:
if name in ball:
ball[name] += 1
else:
ball[name] = 1
## This is where I tried to combine the tow into the Strike dictionary and add 0's when no strikes where recorded
for key, value in ball.items():
if key in strike.keys():
addBall = ball[key]
strike[key].append(addBall)
else:
strike[key] = 0
addBall = ball[key]
strike[key].append(addBall)
基本上,我认为这一切都错了,我想寻求指导。让我知道是否需要详细说明。有什么帮助!
【问题讨论】:
-
向我们展示您的代码。如果名称不存在,则需要将其设置为 [0.0] 才能启动。你永远不想附加值。你总是有两个整数。
-
字典似乎是解决这个问题的不好方法。我建议熊猫。如果可以的话,可以尝试把一些东西放在一起。
-
欢迎来到 Stack Overflow。请阅读meta.stackoverflow.com/questions/359146/…。您对错误消息的描述不足以debug 问题。 阅读和理解错误消息对于您自己的努力很重要 (since you are supposed to try first),只有您向我们提供该信息,我们才能采取行动。
-
您还应该首先尝试用简单的英语逐步描述您的代码的预期逻辑。你可能会发现拿一支真正的铅笔和一张纸,然后画一个流程图很有帮助。但是考虑一下:如果您尝试直接构建字典怎么办?假设您遇到
Tim gets a strike。假设Tim不在字典中;为了反映罢工,应该在字典中加入什么? (提示:他现在有多少个好球?他现在有多少个球?)如果他已经在字典里,值会是什么样子?你应该如何改变它?
标签: python python-3.x dictionary