Python 使用字典时出现KeyError:3

Python 使用字典时出现KeyError:3,python,dataframe,dictionary,if-statement,keyerror,Python,Dataframe,Dictionary,If Statement,Keyerror,我试图在一个模拟中计算水的氢键数量,我有3000个水分子(1000个氧和2000个氢)。所以我为它写了一个代码 我有一个数据帧(df1),在这个数据帧中,我看到氧原子的位置 是3的倍数(0,3,6,…)和其他位置的氢原子和 原子的x,y,z坐标(xi,yi,zi)。现在进行HB计算I 需要两个距离小于3.5的氧原子,即d1AKeyError在您尝试访问dict中不存在的密钥时被触发。如果这发生在If(record[j]==4或record[i]==4)行中,则意味着j或i被设置为3,并且reco

我试图在一个模拟中计算水的氢键数量,我有3000个水分子(1000个氧和2000个氢)。所以我为它写了一个代码

我有一个数据帧(
df1
),在这个数据帧中,我看到氧原子的位置 是3的倍数(0,3,6,…)和其他位置的氢原子和 原子的x,y,z坐标
(xi,yi,zi)
。现在进行HB计算I
需要两个距离小于3.5的氧原子,即
d1A
KeyError
在您尝试访问dict中不存在的密钥时被触发。如果这发生在
If(record[j]==4或record[i]==4)
行中,则意味着
j
i
被设置为3,并且
record[3]
不存在

如果
记录[3]
应该存在,您需要弄清楚为什么不设置它。从您的代码来看,如果某个特定值通过
if(d1),则该值似乎只会添加到
记录中
import math
count=0
record={}

for i in range(0,3000,3):
  for j in range (i+3,3000,3):
    flag=0
    x1=0
    y1=0
    z1=0
    d1=0
    x1=df1['xi'][i]-df1['xi'][j]
    y1=df1['yi'][i]-df1['yi'][j]
    z1=df1['zi'][i]-df1['zi'][j]
    d1=math.sqrt((x1**2)+(y1**2)+(z1**2))

    if (d1<3.5):
      if(flag==0):
        for k in range(1,3,1):
            x2=0
            y2=0
            z2=0
            d2=0
            x2=df1['xi'][i+k]-df1['xi'][i]
            y2=df1['yi'][i+k]-df1['yi'][i]
            z2=df1['zi'][i+k]-df1['zi'][i]
            d2=math.sqrt((x2**2)+(y2**2)+(z2**2))

            x3=0
            y3=0
            z3=0
            d3=0
            x3=df1['xi'][i+k]-df1['xi'][j]
            y3=df1['yi'][i+k]-df1['yi'][j]
            z3=df1['zi'][i+k]-df1['zi'][j]
            d3=math.sqrt((x3**2)+(y3**2)+(z3**2))

            final=0
            final=math.acos(((d2**2)+(d3**2)-(d1**2))/(2*(d2*d3)))

            if (final<0.523):

              if j not in record:
                record.update({j:1})
              else :
                record[j]=record[j]+1

              if i not in record:
                record.update({i:1})
              else :
                record[i]=record[i]+1

              count=count+1
              flag=1

      if (flag==0):
        for l in range(1,3,1):
            x2=0
            y2=0
            z2=0
            d2=0
            x2=df1['xi'][i]-df1['xi'][j+l]
            y2=df1['yi'][i]-df1['yi'][j+l]
            z2=df1['zi'][i]-df1['zi'][j+l]
            d2=math.sqrt((x2**2)+(y2**2)+(z2**2))

            x3=0
            y3=0
            z3=0
            d3=0
            x3=df1['xi'][j]-df1['xi'][j+l]
            y3=df1['yi'][j]-df1['yi'][j+l]
            z3=df1['zi'][j]-df1['zi'][j+l]
            d3=math.sqrt((x3**2)+(y3**2)+(z3**2))

            final=0
            final=math.acos(((d2**2)+(d3**2)-(d1**2))/(2*(d2*d3)))

            if (final<0.523):

              if j not in record:
                record.update({j:1})
              else :
                record[j]=record[j]+1

              if i not in record:
                record.update({i:1})
              else :
                record[i]=record[i]+1

              count=count+1
              flag=1

    if (record[j]==4 or record[i]==4):
     break

    else:
      continue