You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何用输入构建字典?求解代码中split与生成器部分逻辑

问题解答

先解决你原来的while循环停滞问题

你的代码卡住是因为input()函数只接受一个字符串参数当提示语,你传了两个参数(提示文本和i),Python会直接报错导致程序停滞。修正后的代码可以这样写,同时把数据存入字典:

student_scores = {}
i = 10
while i > 0:
    name = input(f"Enter name of student {11 - i}: ")
    # 把输入的分数转为整数,确保类型正确
    marks = int(input(f"Enter marks of student {11 - i}: "))
    student_scores[name] = marks
    i -= 1
print(student_scores)

这里用f-string把序号拼到提示语里,同时处理了分数的类型转换,最后将姓名和分数对应存入字典。

解释你查到的一行代码

d = dict(input("Enter key and value: ").split() for _ in range(n)) 这行是用生成器表达式快速构建字典,拆解来看:

  • range(n):当n=10时,会生成0到9的序列,作用是让程序循环10次,对应输入10组姓名和分数。
  • _:是Python里的“占位符变量”,意思是我们不需要用到这个循环变量的具体值,只是需要循环n次而已。换成其他变量名比如i也可以,但用_是约定俗成的写法,更清晰直白。
  • input(...).split():每次输入一行内容(比如"Bob 88"),split()方法默认按空格把字符串拆分成一个列表,结果就是["Bob", "88"]——这个列表正好是一组“键-值”对,第一个元素是字典的键(姓名),第二个是值(分数)。
  • 整个input(...).split() for _ in range(n)是生成器,会依次生成10个这样的键值对列表,dict()函数接收这些列表,直接把它们转换成字典。

注意:这行代码默认用户输入的姓名和分数之间用空格分隔,而且分数会是字符串类型,如果需要整数,得加个类型转换,比如:

n = 10
d = dict((name, int(marks)) for name, marks in (input("Enter name and marks: ").split() for _ in range(n)))

内容的提问来源于stack exchange,提问作者Abburu Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:02:46