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

时间:2017-10-10 22:29:37

标签: python-3.x dictionary input

致力于创建基本的学生/成绩词典。我有一个工作解决方案,读取一行输入,然后将键/值对存储在字典中。代码读作:

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)

对于与上面完全相同的输入,键/值对被反转,输出put为:

{'50': 'John '}
{'47': 'Mary', '50': 'John '}

问题是,为什么Python会颠倒输入的顺序以及在单行代码中读取此内容的正确格式是什么?虽然我有一个可行的解决方案,但我觉得有一些根本的东西,我不理解输入()或字典的构建。对不起基本问题,现在只使用Python大约一个月了。

1 个答案:

答案 0 :(得分:0)

与Java不同,Python在评估左侧的任何表达式之前,会完全评估赋值的右侧。这意味着在

student_scores[input()] = input()

评估顺序

                          input()
student_scores
               input()

然后是作业。因此,首先评估右侧的input(),与

不同
key, value = input(), input()

左边的input()首先评估,input()调用读取输入的顺序相反。

对此没有一个好的单线。坚持两行应该没问题。