【问题标题】:Python - Update Dictionary With User InputPython - 使用用户输入更新字典
【发布时间】:2017-11-15 09:01:37
【问题描述】:

对于我程序的这一部分,我需要编写允许用户更新字典的代码。关键是员工 ID,可更新字段是他们的姓名、部门和职位。这样当查看更新的记录时,它会显示新的名称、职位和部门。员工在哪里是字典。这是我到目前为止所拥有的:

while Choice == '2':

    dict_key = input('Enter the employee ID of the employee to change the record: ')

    if dict_key in Employees:
        n = 3
        print('Enter the new Name, Department, and Title')
        for i in range(n):
            updates = input().split(' ')

        Employees[dict_key] = updates[0][1][2]          
        print('\n')
    else:
        print('ERROR: That record does not exist!')
        print('\n')

    Continue = input('Press 1 to update another employee record or 2 to exit: ')
    print('\n')

    if Continue == '2':
        print('*' * 80)
        break

运行此代码时出现以下错误:

Traceback (most recent call last): 
line 43, in <module>
  Employees[dict_key] = updates[0][1][2]
IndexError: string index out of range

ex 的期望输出: 如果员工 ID 1234 = John,IT,Programmer 更新内容是:John Doe,IT 经理。

在更新条目后,员工 ID 1234 应该 = John Doe,IT,Manager。

编辑 我试图以一种用户可以单独输入更新(名称第一,标题第二......)并使用所有三个输入更新键值(1234)的字典的方式进行编程,以获得我想要的输出。

对不起,如果我的代码是一团糟,我现在正在学习 python。如果我的帖子一团糟,也很抱歉,也是第一次来这里。

【问题讨论】:

  • 如果更新包含,,那么你应该split(',');另外,您正在 for 循环中覆盖 updates
  • 你没有做你认为你正在做的事情。 updates[0] 会给你第一个字符串 ("John Doe"),然后updates[0][1] 会给你"J",最后updates[0][1][2] 给你一个IndexError,因为[2] 超出了字符串的末尾。如果您打算将数据存储为元组,那么只需使用 Employees[dict_key] = updates 就可以了。我认为你真正想做的是updates[0], updates[1], updates[2])。注意:您的方法和拆分还有其他问题。您应该单独询问每个字段(姓名、部门、​​职位)并避免拆分。

标签: python dictionary


【解决方案1】:

您的 .split 方法不起作用,因为用户没有输入任何空格 (' ')。而是将您的代码更改为updates = input().split(',')

应该可以解决其中一个问题

【讨论】:

    【解决方案2】:

    updates 是一个列表。如果你想存储更新的记录,你应该写成:

    Employee[dict_key] = updates
    

    这将创建一个结构:

    {'1234': ['John', 'IT', 'Manager']}
    

    正如 cmets 所指出的,如果输入由 , 分隔,则使用 split(',')

    【讨论】:

      【解决方案3】:

      您的 updates 是一个包含一个字符串的列表,您可以在 for 循环中的每个新输入中删除该字符串。您可能想使用append 在列表中添加新元素。

      所以你的for 循环将是

      for i in range(n):
                  updates.append(input().split(' '))
      

      在代码前面将更新定义为列表之后。 另外,使用split 将使您的updates 成为列表列表:

      >>> updates
      >>> [['John'], ['IT'], ['programmer']]
      

      我建议你写updates.append(input())然后输出将是['John', 'IT', 'programmer']

      最后,要访问这些新信息,您只需将更新视为一维列表。

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        哇,我觉得有点笨。但我设法找出了我的问题。读完 cmets 后,我的灯泡亮了。我制作了一个空列表,并将每个输入附加到列表中。允许三个单独的输入。

        updates = []
        
                updates.append(input('Enter the new name: '))
                updates.append(input('Enter the new department: '))
                updates.append(input('Enter the new Title: '))
        

        我还将这部分更新为:

        Employees[dict_key] = updates 
        

        现在我更新后的输出如下:

        ['John Doe', 'IT', 'Manager']
        

        感谢大家的反馈!我不知道为什么我之前没有想到这一点。

        【讨论】:

          猜你喜欢
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-07
          相关资源
          最近更新 更多