【发布时间】:2016-03-12 16:25:09
【问题描述】:
我有一个如下格式的 YAML 文件:
innings:
- 1st innings:
team: England
deliveries:
- 0.1:
batsman: ME Trescothick
bowler: Shoaib Akhtar
extras:
wides: 1
non_striker: AJ Strauss
runs:
batsman: 0
extras: 1
total: 1
- 0.2:
batsman: ME Trescothick
bowler: Shoaib Akhtar
non_striker: AJ Strauss
runs:
batsman: 0
extras: 0
total: 0
- 2nd innings:
team: Pakistan
deliveries:
- 0.1:
batsman: Shoaib Malik
bowler: D Gough
non_striker: Mohammad Hafeez
runs:
batsman: 2
extras: 0
total: 2
- 0.2:
batsman: Shoaib Malik
bowler: D Gough
extras:
wides: 5
non_striker: Mohammad Hafeez
runs:
batsman: 0
extras: 5
total: 5
我正在使用以下代码访问 yaml 数据:
with open(fpath, 'r') as stream:
datamap = yaml.safe_load(stream)
x = bunchify(datamap)
print x.innings[0]
打印语句给我以下结果:
- 1st innings:
team: England
deliveries:
- 0.1:
batsman: ME Trescothick
bowler: Shoaib Akhtar
extras:
wides: 1
non_striker: AJ Strauss
runs:
batsman: 0
extras: 1
total: 1
- 0.2:
batsman: ME Trescothick
bowler: Shoaib Akhtar
non_striker: AJ Strauss
runs:
batsman: 0
extras: 0
total: 0
但是当我尝试使用以下语句访问第一局时:
print x.innings[0].1st innings
它会抛出一个错误。我什至尝试将字符串“1st innings”分配给一个变量并使用它。但是它会抛出一个错误:
inn = "1st innings"
print x.innings[0].inn
我需要获得总运行次数。为此,我需要添加列表中每个球的总数[0.1, 0.2,...]。
【问题讨论】:
-
你不能这样做
x.innings[0].1st innings... 它在空间中断,所以你正在做x.innings[0].1st这也是不正确的。也许你的意思是x.innings[0]['1st innings']? -
1.
1st innings不是有效的 identifier name。 2.x.innings[0].inn正在寻找一个字面上命名为inn的属性,它不关心你分配给变量inn的内容。您需要getattr或关键符号,如@cricket_007 所示。 -
@cricket_007 成功了。但是,当我尝试使用 print x.innings[0]['1st innings'].deliveries[2].runs 访问每个球的总数时,它会引发错误。我在这里犯了什么错误。你能告诉我计算每局总得分的方法吗?
-
你需要停止使用点符号,就像你有一个对象一样。继续使用关键符号。
-
>>> x['innings'][0]['1st innings']['deliveries'][0][0.1]['runs']返回{'batsman': 0, 'extras': 1, 'total': 1}字典键可以是任何可散列的对象,甚至是浮点数或整数,因此您希望使用0.1数字而不是字符串。
标签: python dictionary yaml