为什么直接从用户输入创建字典时键/值对反转

问题描述:

致力于创建基本的学生/成绩字典。我有一个工作解决方案,它读取一行中的输入,然后将键/值对存储在字典中。代码读取为:为什么直接从用户输入创建字典时键/值对反转

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。

+0

与Java不同,Python在评估左侧任何表达式之前完全评估赋值的右侧,因此右侧的input()会先评估。这里可能有一个很好的玩笑。 – user2357112

+0

(我希望Python首先评估LHS表达式,但这不是他们所做的设计决定。) – user2357112

+0

对于表达式评估顺序找不到任何有用的东西。所有接近的事情都是在评估RHS之前,先评估RHS,然后再评估多个任务中的任务,或者在评估下一个任务目标中的表达式之前执行一个任务,而不是在评估任务目标中的表达式之前评估RHS。 – user2357112

不像Java那样,Python在评估左侧任何表达式之前,完全评估了赋值的右侧。这意味着,在

student_scores[input()] = input() 

评估顺序去

      input() 
student_scores 
       input() 

,然后分配。因此,右侧的input()首先计算,不同于

key, value = input(), input() 

其中左边的input()评估第一,并且其中input()呼叫读取输入的顺序颠倒。


对此,没有一个很好的单线程。坚持两条线应该没问题。

+0

感谢您的快速回复。充分解释我不懂使用input()分配的内容。非常感激。 – Patje