Python字典操作问询:如何正确输出name对应的uid字段值
问题排查与代码修正:打印字典中每个name对应的uid字段
我看了你的代码,这里有几个小问题导致无法实现预期功能,咱们一个个来理清楚:
1. 字典赋值的语法错误
在给std[name]赋值时,'subject'后面少了冒号,字典的键值对必须遵循键: 值的格式,所以这里要改成'subject': {'math':math,'phy':phy,'chem':chem}。
2. 键名大小写不匹配
你在字典里定义的uid键是'Uid'(首字母大写),但后面访问的时候用的是'uid'(全小写)——Python的字典键是严格区分大小写的,这会直接抛出KeyError。建议统一用小写的'uid'来保持一致性。
3. 最后打印的逻辑错误
print(std['name']['uid'])里的'name'是字符串字面量,但你的字典里的键是用户输入的真实名字(比如输入"Alice",键就是"Alice"),不是固定的'name'。而且你需要列出所有name对应的uid,所以应该遍历字典的键值对来批量打印。
另外提一句:如果你用的是Python3,raw_input()要换成input(),因为Python3里已经没有raw_input这个函数啦。
修正后的完整代码
std = {} n = int(input("How many Entries you have to fill:")) # Python3用input,Python2可换回raw_input for i in range(n): name = input("Enter name:") uid = input("ID:") age = input("Age:") print("----Marks----") math = input("Maths:") phy = input("Physics:") chem = input("Chemistry:") # 修正语法错误和键名大小写 std[name] = {'uid': uid, 'age': age, 'subject': {'math': math, 'phy': phy, 'chem': chem}} print('\n') # 遍历字典,打印每个name对应的uid print("List of names and their UIDs:") for name, details in std.items(): print(f"Name: {name}, UID: {details['uid']}") # Python2可改成"Name: %s, UID: %s" % (name, details['uid'])
运行说明
- 运行后输入条目数量,然后依次输入每个学生的信息即可。
- 最后会自动列出所有学生的名字和对应的UID,完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者user9245372
相关产品推荐
相关产品推荐

