【问题标题】:A problem with dictionary (TypeError: string indices must be integers)字典问题(TypeError:字符串索引必须是整数)
【发布时间】:2021-09-25 11:34:42
【问题描述】:

所以,我是这个网站的新用户,我的字典功能有问题。

den = {
    'first_name': 'den',
    'last_name': 'elc',
    'age': '16',
    'city': 'slovakia',
}
for user, user_info in den.items():
    nameo = user_info['first_name']
    namei = user_info['last_name']
    age = user_info['age']
    city = user_info['city']
    print(f"\tFirst name:{nameo}")
    print(f"\tLast_name:{namei}")
    print(f"\tAge:{age}")
    print(f"\tCity:{city}")

Python 打印出这个 TypeError:

    Traceback (most recent call last):
  File "D:/PyCharm Community/pycharm/venv/Test.py", line 15, in <module>
    nameo = user_info['first_name']
TypeError: string indices must be integers

有什么假设吗?

【问题讨论】:

  • 为什么这里有一个循环?
  • 当你做用户时,用户信息,用户信息获取字典值的值,所以那些r一些字符串,字符串本身不能有字符串索引对吗?例如如果你有一个字符串'hi',那么这个字符串有两个索引0和1,但它不能有一个名为'first_name'的索引,对吧?所以你应该做的是只取一个循环变量,然后试试这个,它会像这样工作 -:for user_info in den :。现在你可以使用 -: user_info['first_name'] 获得你想要的值
  • 另外,您似乎想要存储多个此类用户的信息,但是您正在迭代仅包含一个用户信息的字典,因此使用这些作为子字典制作一个更大的字典,那么它应该工作。

标签: python python-3.x dictionary


【解决方案1】:

在这种情况下,如果您有一个字典数组,则不需要 for 循环,那么您需要考虑使用 for 循环。在这里您可以简单地执行以下操作。

den = {
    'first_name': 'den',
    'last_name': 'elc',
    'age': '16',
    'city': 'slovakia',
}
print(f"\tFirst name:{den['first_name']}")
print(f"\tLast_name:{den['last_name']}")
print(f"\tAge:{den['age']}")
print(f"\tCity:{den['city']}")

【讨论】:

    【解决方案2】:

    您可以使用.title() 并执行以下操作:

    den = {
        'first_name': 'den',
        'last_name': 'elc',
        'age': '16',
        'city': 'slovakia',
    }
    for k,v in den.items():
        print(f'\t{k.title()}:{v}')
    

    输出:

        First_Name:den
        Last_Name:elc
        Age:16
        City:slovakia
    

    【讨论】:

      【解决方案3】:

      这里的第一个问题是您试图从字符串本身中提取字符串索引。这是因为当您迭代 den.items() 时,您将分别以 user 和 user_info 的形式迭代其键和值。

      所以对于循环的每次迭代-: 用户=键 user_info = val

      现在,如果您注意到您使用的字典具有字符串形式的值。 例如如果你有一个字符串说'hi'。那么这个字符串有两个索引,只能用整数 0、1 或 -1、-2 表示。但是如果我们这样做呢?

      a = 'hi'
      print(a['first_name'])
      

      它会在这里抛出错误,因为您可能会在此处观察到的字符串索引不能是字符串。

      这里的另一个问题是,从您的代码看来,您似乎需要遍历多个此类用户的信息,但在这里您是针对单个用户执行此操作的。要为多个用户定义它,您需要定义一个更大的字典,其中这些用户信息字典作为子字典。像这样-:

      users = {
          {
           'first_name': 'den',
           'last_name': 'elc',
           'age': '16',
           'city': 'slovakia',
           },
          {
           'first_name': 'den_2',
           'last_name': 'elc_2',
           'age': '19',
           'city': 'romania',
          },
      }
      

      现在你的旧代码迭代这个字典的项目可以正常工作!

      for user, user_info in users.items():
          nameo = user_info['first_name']
          namei = user_info['last_name']
          age = user_info['age']
          city = user_info['city']
          print(f"\tFirst name:{nameo}")
          print(f"\tLast_name:{namei}")
          print(f"\tAge:{age}")
          print(f"\tCity:{city}")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2018-05-15
        • 2021-03-28
        • 2021-04-28
        • 2020-06-24
        • 2016-03-26
        相关资源
        最近更新 更多