(这个问题可能与“使用'for'循环对词典进行迭代”不同之处在于,每个键都有多个条目,并且还有“指向”右键的问题。)
这是一本空字典:
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。
答案 0 :(得分:1)
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]
时,dict中没有这样的键。
如果您坚持使用items()
,也可以直接解包值元组:
for t, (par, coup, price, freq) in instruments.items():
if coup == 0:
print(t)
输出:
0.25
0.5