KeyError循环遍历每个键的多个值

时间:2017-10-06 08:32:49

标签: python dictionary finance keyerror

(这个问题可能与“使用'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。

编辑:使用下面的答案,BootstrapYieldCurve类按照计划在“掌握Python for Finance”一书中运行,第5页。

1 个答案:

答案 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