为什么直接从用户输入创建字典时键/值对反转
问题描述:
致力于创建基本的学生/成绩字典。我有一个工作解决方案,它读取一行中的输入,然后将键/值对存储在字典中。代码读取为:为什么直接从用户输入创建字典时键/值对反转
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在评估左侧任何表达式之前,完全评估了赋值的右侧。这意味着,在
student_scores[input()] = input()
评估顺序去
input()
student_scores
input()
,然后分配。因此,右侧的input()
首先计算,不同于
key, value = input(), input()
其中左边的input()
评估第一,并且其中input()
呼叫读取输入的顺序颠倒。
对此,没有一个很好的单线程。坚持两条线应该没问题。
+0
感谢您的快速回复。充分解释我不懂使用input()分配的内容。非常感激。 – Patje
与Java不同,Python在评估左侧任何表达式之前完全评估赋值的右侧,因此右侧的input()会先评估。这里可能有一个很好的玩笑。 – user2357112
(我希望Python首先评估LHS表达式,但这不是他们所做的设计决定。) – user2357112
对于表达式评估顺序找不到任何有用的东西。所有接近的事情都是在评估RHS之前,先评估RHS,然后再评估多个任务中的任务,或者在评估下一个任务目标中的表达式之前执行一个任务,而不是在评估任务目标中的表达式之前评估RHS。 – user2357112