【发布时间】:2017-10-10 22:29:36
【问题描述】:
致力于创建基本的学生/年级词典。我有一个可行的解决方案,可以在一行上读取输入,然后将键/值对存储在字典中。代码如下:
student_scores = {}
for _ in range(int(input())):
key, value = input(), input()
student_scores[key] = value
print(student_scores)
代码的示例输入是:
2
John
50
Mary
47
这可以正常工作并给出预期的(对我而言)输出:
{'John ': '50'}
{'John ': '50', 'Mary': '47'}
但是,当我尝试将输入压缩以直接输入字典时...
student_scores = {}
for _ in range(int(input())):
student_scores[input()] = input()
print(student_scores)
对于与上述完全相同的输入,键/值对被反转,输出为:
{'50': 'John '}
{'47': 'Mary', '50': 'John '}
那么问题是为什么 Python 会颠倒输入的顺序,以及在一行代码中读取它的正确格式是什么?虽然我有一个可行的解决方案,但我觉得无论是 input() 还是字典的构造,我都无法理解一些基本的东西。很抱歉这个基本问题,现在才研究 Python 大约一个月。
【问题讨论】:
-
与 Java 不同,Python 在评估左侧的任何表达式之前完全评估赋值的右侧,因此右侧的
input()首先评估。这里的某个地方可能有一个很好的骗局。 -
(我希望 Python 会首先评估 LHS 表达式,但这不是他们做出的设计决定。)
-
找不到任何适合表达式求值顺序的东西。一切都在谈论在执行多重赋值之前评估 RHS,或者在评估下一个赋值目标中的表达式之前执行一个赋值,而不是在评估赋值目标中的表达式之前评估 RHS。
标签: python-3.x dictionary input