将字典存储在二进制文件中时,键值对无法正常工作,为什么?

问题描述

代码的目的是为名称分配卷号,两者都作为键值对存储在字典中。搜索功能应该为给定的卷不返回相应的名称,但它没有,我不知道为什么。

这是错误代码

import pickle

f=open('atextfile.dat','wb')
d={}
while True:
    name=input('enter name: ')
    rollno=int(input('enter rollno: '))
    d[rollno]=name
    con=input('Do you want to continue?(y/n): ')
    if con=='n':
        break
print(d)
pickle.dump(d,f)
f.close()

def search():
    f=open('atextfile.dat','rb')
    r=pickle.load(f)
    roll=int(input('what roll no number?: '))
    try:
        n=d[rollno]
        print('name is',n)
    except:
        print('rollno not found :/')
    f.close()

search()

This is the anomalous output I am getting:

解决方法

在使用变量 roll 加载文件内容时将 d[rollno] 更改为 d[roll]

import pickle

f=open('atextfile.dat','wb')
d={}
while True:
    name=input('enter name: ')
    rollno=int(input('enter rollno: '))
    d[rollno]=name
    con=input('Do you want to continue?(y/n): ')
    if con=='n':
        break
print(d)
pickle.dump(d,f)
f.close()

def search():
    f=open('atextfile.dat','rb')
    r=pickle.load(f)
    roll=int(input('what roll no number?: '))
    try:
        n=d[roll] # this was the fault
        print('name is',n)
    except:
        print('rollno not found :/')
    f.close()

search()