在Python函数中访问循环创建的字典的特定值

时间:2013-03-06 23:29:00

标签: python function loops dictionary

我是Python的新手,作为练习,我尝试使用代码解决基本的财务练习。我的目标是获得即期汇率字典,然后根据这些字典计算折扣率字典。我曾想过这样的事情:

discountrates={}

def discountrates(n):
    spotrates={}
    for x in range(1,n+1):
        spotrates['s'+str(x)]=float(input('What is s'+str(x)+'? (not in percentage)'))
    for y in range(1,n+1):
         discountrates['d(0,'+str(y)+')']= 1/((1+float(spotrates['s'+str(y)]))**y)
    for key, value in discountrates.items():
        print (key, value) 

现在问题是无法在函数中访问字典项。当我查看你的论坛时,我找到了解压缩字典的解决方案,但这在我的情况下不起作用,因为我需要访问字典的特定元素,其名称无法完全指定(正如我在Python手册中看到的那样)因为它是循环的一部分,为了使公式工作而不必手动插入任何其他东西。我首先使用字典来创建自动生成的名称,但现在我似乎无法从中获取信息。

什么是最佳解决方案?

提前感谢您的帮助。这让我发疯了。

2 个答案:

答案 0 :(得分:2)

这是因为您调用了全局变量discountratesdict而不是discountrates(这是您的函数的名称)。

答案 1 :(得分:0)

我建议你不要像你的功能那样命名你的字典,因为后者会覆盖前者。在第1行你说discountrates是空的dict,在第2行你说{{1是一个函数对象。如果它们在同一个范围内,你需要在python中给它们不同的名称。

此外,为什么discountrates需要discountrates?如果global小于之前的n,您是否希望保留旧费率?为了性能,我建议你结合两个循环。除此之外,没有理由为什么第二个循环也不能读取n,因为无论如何都不再使用x。作为进一步的提示,如果你得出结论,全局是它可能有助于添加for x ...的唯一方式,因此更容易发现全局意图在这里,即使这不是必需的你的特殊情况,因为global discountratesdict - 运算符需要一个对象,因此它已经引用了你的全局。

将所有这些放在一起产生:

[]
相关问题