【问题标题】:Why are key/value pairs reversed when creating dictionary directly from user input为什么直接从用户输入创建字典时键/值对反转
【发布时间】: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


【解决方案1】:

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

student_scores[input()] = input()

评估顺序进行

                          input()
student_scores
               input()

然后是作业。因此,右边的input()首先被评估,不像

key, value = input(), input()

左边的input()首先求值,而input()调用读取输入的顺序颠倒了。


没有一个很好的单行线。把它放在两条线上应该没问题。

【讨论】:

  • 感谢您的快速回复。充分解释了我对使用 input() 进行分配的不理解。非常感谢。
猜你喜欢
  • 2016-12-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多