【问题标题】:Code to Make and Print a Dictionary Containing Input Values Outputs an Incomplete Dictionary; Why?制作和打印包含输入值的字典的代码输出不完整的字典;为什么?
【发布时间】:2021-10-08 09:00:40
【问题描述】:

我正在尝试将 5 对用户输入变量(用户名和年龄)存储到字典中,并在打印语句中返回该字典,但它一直输出只有最后一个键值对的字典。导致这种情况发生的代码中发生了什么?

query_count= 0
user_info = {}
for i in range (5):
    query_count = 0
    user_info = {}
    user_info['user'] = input("user: ")
    user_info['age'] = input("age: ")
    query_count += 1
    if query_count < 5:
        continue
print(user_info)

示例输出:

{'user': 'Jamie', 'age': '42'}

【问题讨论】:

  • 每次迭代都会覆盖字典。
  • 尝试删除 for 循环中的“user_info = {}”
  • 删除了“user_info = {}”,仍然得到相同的结果。将寻找防止它重复覆盖的方法。谢谢

标签: python dictionary input conditional-statements


【解决方案1】:

你实际上一次又一次地更新相同的键。 U 可以改为使用用户名作为键,将其值作为年龄。

user_info = {}
for i in range(5):
   name = input('Enter name:')
   age = int(input('Enter age: '))
   user_info[name] = age
   print('One Entry Taken!') 
print(user_info)

我认为没有必要在每次输入后打印年龄和姓名。输出:

{'name1': 1, 'name2': 2, 'name3': 3, 'name4':4, 'name5': 5}

实现此目的的pythonic方法:

user_info = {}
for i in range(5):
    name, user_info[name] = input('Enter name: '), int(input('Enter age: '))
print(user_info)

我不明白在你的逻辑中使用 query_count。请详细说明。

【讨论】:

  • 谢谢,这是一个很大的帮助。除了我对如何实现将连续输入迭代添加到字典中的误解之外,query_count 没有真正的原因。你的 pythonic 演绎非常有效,我将研究一个与我原来的对比的例子。如果我想为给定年龄以下的每个用户打印一条消息,我是否会将循环语句中的用户年龄称为“if user_info[name]
  • 你实际上可以遍历字典,比如:for i in user_info... i 是关键... user_info[i] 是年龄所以你可以写: if user_info[i]
  • 好的,我会努力的。再次感谢您。
【解决方案2】:

您正在更新 user_info 中的相同键,从而覆盖以前的输入。您应该使用list,并将单个user_info 字典附加到循环内的该列表中。 看看下面的代码:

users = []
for i in range(5):
   user_info = {}
   user_info['user'] = input("user: ")
   user_info['age'] = input("age: ")
   users.append(user_info)
print(users)

您能否详细说明代码中query_count 逻辑的用途?我已将其从我发布的 sn-p 中删除,因为如果您只想获取 {'user': 'x', 'age': 'y'} 字典列表,则不需要它。

【讨论】:

  • 这个版本有效。非常感谢你帮助我。 query_count 在那里基本上是因为我不完全理解如何使用正确的语法实现发生一定次数的迭代。这给了我一些需要考虑的事情。再次感谢您。
【解决方案3】:

您将相同的字段更新五次。没有“i”的引用可以告诉字典进行迭代。字典也有键值对。您不能多次拥有一把钥匙。而不是你应该有像 "name":"age" 这样的条目说 "abc":"23"

试试下面的代码:

user_info = {}
for i in range (5):
    name = input("user: ")
    print(name)
    age = input("age: ")
    print(age)
    user_info[name] = age
print(user_info)

输出:{'a': '1', 'b': '2', 'c': '3', 'd': '4', 'e': '5'}

请注意,如果您输入重复名称,则字典中的条目将被替换。

【讨论】:

  • 感谢您的洞察力。将尝试使用它来重新编写代码。
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2021-04-14
  • 2017-05-14
  • 2012-06-08
  • 1970-01-01
相关资源
最近更新 更多