想要使用户在 python 函数参数中输入的字典键
Want to make dictionary key inputted by user in a python function argument
def build_profile(f_name,l_name,**qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "),\
input("Enter last name:"),graduation=input("Enter Subject:"),\
masters=input("Enter Subject:")))
if input("Want to finish?(Y/N) ").upper()=="Y":
break
print(pl)
给定的函数接受 'graduation' 和 'masters' 键的用户输入值,但我认为对于不同的用户,教育水平可能不同,有些可能是 PHD,有些甚至可能没有完成中学。我试图将字典 'qualification' 的键值转换为由用户输入,但每当我转换
graduation=input("Enter Subject:")
到
input("Enter value:")=input("Enter Subject:")
我收到错误消息“关键字不能是表达式”。在互联网上搜索时,我知道 python 中的 split() 函数可以完成它,但我无法在我的代码中使用它。
#已解决
根据答案,我修改了我的代码如下,现在它按照我的期望工作:
def build_profile(f_name,l_name,qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
first_name=input("first name: ")
last_name=input("last name: ")
no_of_qual=int(input("How many qualification you want to add?"))
dict_qual={}
for qual in range(no_of_qual):
dict_qual[input("Enter subject")]=input("Enter qualification")
inv_qual = {v: k for k, v in dict_qual.items()}
pl.append(build_profile(first_name,last_name,inv_qual))
if input("Want to add more users?(Y/N) ").upper()=="N":
break
print(pl)
您可能想要的不是为不同的人设置不同的密钥,而是添加一个密钥,例如“级别”,您可以使用您要求的不同值(如 PHD)。那么它看起来像这样:
def build_profile(f_name,l_name,**qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "),\
input("Enter last name:"),graduation=input("Enter Subject:"),\
masters=input("Enter Subject:"),\
level=input("Enter the level"))
if input("Want to finish?(Y/N) ").upper()=="Y":
break
print(pl)
您正在尝试使用字符串作为参数 name,这是不可能的。输入实际字典可能比使用 ** 参数更好:
def build_profile(f_name: str, l_name: str, qualification: dict) -> dict:
return {'first': f_name, 'last': l_name, **qualification}
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "), \
input("Enter last name: "), \
{input("Enter value: "):input("Enter subject: ")}))
if input("Want to finish? (Y/N) ").upper() == "Y":
break
print(pl)
它要求一个值,然后是一个主题(只有一次)。
def build_profile(f_name,l_name,**qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "),\
input("Enter last name:"),graduation=input("Enter Subject:"),\
masters=input("Enter Subject:")))
if input("Want to finish?(Y/N) ").upper()=="Y":
break
print(pl)
给定的函数接受 'graduation' 和 'masters' 键的用户输入值,但我认为对于不同的用户,教育水平可能不同,有些可能是 PHD,有些甚至可能没有完成中学。我试图将字典 'qualification' 的键值转换为由用户输入,但每当我转换
graduation=input("Enter Subject:")
到
input("Enter value:")=input("Enter Subject:")
我收到错误消息“关键字不能是表达式”。在互联网上搜索时,我知道 python 中的 split() 函数可以完成它,但我无法在我的代码中使用它。
#已解决 根据答案,我修改了我的代码如下,现在它按照我的期望工作:
def build_profile(f_name,l_name,qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
first_name=input("first name: ")
last_name=input("last name: ")
no_of_qual=int(input("How many qualification you want to add?"))
dict_qual={}
for qual in range(no_of_qual):
dict_qual[input("Enter subject")]=input("Enter qualification")
inv_qual = {v: k for k, v in dict_qual.items()}
pl.append(build_profile(first_name,last_name,inv_qual))
if input("Want to add more users?(Y/N) ").upper()=="N":
break
print(pl)
您可能想要的不是为不同的人设置不同的密钥,而是添加一个密钥,例如“级别”,您可以使用您要求的不同值(如 PHD)。那么它看起来像这样:
def build_profile(f_name,l_name,**qualification):
profile={}
profile['first']=f_name
profile['last']=l_name
for k,v in qualification.items():
profile[k]=v
return profile
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "),\
input("Enter last name:"),graduation=input("Enter Subject:"),\
masters=input("Enter Subject:"),\
level=input("Enter the level"))
if input("Want to finish?(Y/N) ").upper()=="Y":
break
print(pl)
您正在尝试使用字符串作为参数 name,这是不可能的。输入实际字典可能比使用 ** 参数更好:
def build_profile(f_name: str, l_name: str, qualification: dict) -> dict:
return {'first': f_name, 'last': l_name, **qualification}
pl=[]
while True:
pl.append(build_profile(input("Enter first name: "), \
input("Enter last name: "), \
{input("Enter value: "):input("Enter subject: ")}))
if input("Want to finish? (Y/N) ").upper() == "Y":
break
print(pl)
它要求一个值,然后是一个主题(只有一次)。