【问题标题】:KeyError 3 in python when more dictionaries are added添加更多字典时python中的KeyError 3
【发布时间】:2018-04-15 20:50:30
【问题描述】:

我写了以下代码。代码运行良好。但是当我添加yt[i]=y[i-1]+delta(R1,R2) 时,会出现错误:

yt[i]=y[i-1]+delta(R1,R2) KeyError: 1

函数a只是一个例子,并不是真实的。

import numpy as np
import math
from math import *

x  = { 0: 0.3 }
xt = {}
N=10
y  = { 0: 0.2 }
yt = {}

def a(z,s):
    return sqrt(z)+s

def delta(r1,r2):
        sig=0.055
        d=sig*(np.sqrt(-2*np.log(r1))*np.cos(np.radians(r2)))
        return d

for i in range(1,N):
    R1=np.random.uniform(0,1)
    R2=np.random.uniform(0,1)
    R3=np.random.uniform(0,1)

    xt[i]=x[i-1]+delta(R1,R2)
    yt[i]=y[i-1]+delta(R1,R2)

    if a(xt[i],yt[i])>R3:
        x[i]=xt[i]
        print('f')
    else:
        x[i]=x[i-1]
        print('s')

    print(x[i], delta(R1,R2), i)

感谢您的帮助。

【问题讨论】:

  • 代码引发了 KeyError,因为在 for 循环的第二次迭代中,i=2y={0: 0.2}。你期望y[i-1] 在第二次迭代中是什么?将该值分配给y[i-1]
  • @phihag 很好,x = { 0: 0.3 } 可以正常工作,为什么y 会出错? yx 完全相同,但参数不同。
  • @phihag 对于i=1 y0.2,对于i=2 y0.2+delta 等等。
  • 您的代码中没有数组。您正在使用dict
  • @juanpa.arrivillaga 已更新。请问您知道任何解决方案吗?

标签: python arrays random keyerror


【解决方案1】:

代码适用于x,因为下部的if/else 块更新x 以包含x[i] 的值(将在下一次迭代中检查为x[i-1]) . y dict 没有这样的更新,所以在第二遍时,y[i-1] 不可用。

您可能需要在现有的 if/else 块中或在具有自己逻辑的等效块中添加类似 y[i]=yt[i] 的行。

【讨论】:

  • 哎呀,你的意思是整个问题是关于在块中添加y[i]=yt[i]?奇怪而完美。
猜你喜欢
  • 2013-04-29
  • 2021-02-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多