KeyError通过循环遍历每个键的多个值
问题描述:
(这个问题可能与“循环使用字典迭代”有所不同,因为我有多个键,每个键都有多个条目,并且还有问题指向正确的键)。KeyError通过循环遍历每个键的多个值
有这个空字典:
import .math
instruments = {}
下面这个简单的方法来填充它:
def add_instrument(par, T, coup, price, compounding_freq = 2):
instruments[T] = (par, coup, price, compounding_freq)
add_instrument(100, 0.25, 0., 97.5)
add_instrument(100, 0.5, 0., 94.9)
add_instrument(100, 1.0, 3., 90.)
add_instrument(100, 1.5, 8, 96., 2)
如果我们检查:
instruments.keys()
我们得到:[0.25, 0.5, 1.5, 1.0]
我会那么喜欢通过字典和if coup == 0
环,做一些操作,否则做别的事情:
for T in instruments.items():
(par, coupon, price, freq) = instruments[T]
if coupon == 0:
do_something
但我得到一个#KeyError: (0.25, (100, 0.0, 97.5, 2))
任何想法,为什么和我应该如何重新安排循环? TIA。
编辑:使用下面的答案,BootstrapYieldCurve类按照计划在“掌握财务的Python”一书中工作,ch5。
答
T
是关键,所以你应该for T in instruments
迭代:
import math
instruments = {}
def add_instrument(par, T, coup, price, compounding_freq = 2):
instruments[T] = (par, coup, price, compounding_freq)
add_instrument(100, 0.25, 0., 97.5)
add_instrument(100, 0.5, 0., 94.9)
add_instrument(100, 1.0, 3., 90.)
add_instrument(100, 1.5, 8, 96., 2)
for T in instruments:
par, coupon, price, freq = instruments[T]
if coupon == 0:
print(T)
如果使用for T in instruments.items()
,T
成为(key, value)
的元组。当你再找instruments[T]
时,字典中没有这样的密钥。
你也可以拆开值元组直接,如果你坚持要用items()
:
for t, (par, coup, price, freq) in instruments.items():
if coup == 0:
print(t)
它输出:
0.25
0.5
+0
谢谢埃里克,这终于奏效了。事实上,当使用instruments.keys()而不是instrumetns.items()时,我解决了第三个元素的解压问题。 –
'对于T在instruments.items():'应该是'为T在instruments.keys()中:'或者只是'用于乐器中的T:' –
当您在instruments.items()中更改'T'时:'to'为T,_中的instruments.items():'也是,我相信你应该在你的add_instruments函数中写入'global instruments'。 – SRC