【问题标题】:Getting TypeError: list indices must be integers, not str when trying to read data from dictionary获取 TypeError:列表索引必须是整数,而不是 str 尝试从字典中读取数据时
【发布时间】:2019-01-23 11:44:14
【问题描述】:

在下面的程序中,我有包含字典和列表的“数据”。我正在尝试读取“角色”的值但收到错误:

import json

data = {"users":[{"user_id":"11w","device_id":"AQ","role":"OWN","links":{"rel":"self","href":"test_link"}}]}

k= json.loads(data)
role= k["users"]["role"]
print role

错误:TypeError:列表索引必须是整数,而不是str

【问题讨论】:

  • 您有一个包含字典列表的字典,而不是包含字典的字典。试试k["users"][0]["role"]
  • @Graipher 我认为您的评论算作回答
  • @Gsk:我现在添加了这个(略微扩展)作为答案。

标签: python json python-2.7 dictionary


【解决方案1】:

您有一个包含字典列表的字典,而不是包含字典的字典。并且列表只能用整数(和切片,但它们也包含整数)进行索引。

要获取第一个(本例中只有一个)用户的角色,只需使用以下命令:

role = k["users"][0]["role"]
print role
# OWN

或者,如果您有多个用户,则对其进行迭代:

for user in k["users"]:
    print user["role"]

【讨论】:

    【解决方案2】:

    逐行查看:

    data = {"users":[{"user_id":"11w","device_id":"AQ","role":"OWN","links":{"rel":"self","href":"test_link"}}]}
    

    data 现在拥有一个字典列表的字典。

    k = json.loads(data)
    

    给出一个 json TypeError,因为 json.loads 需要传递一个字符串,而不是像 data 这样的 python 数据结构。

    role = k["users"]["role"]
    

    正如您所发现的那样,这是行不通的。让我们一步一步找到数据:

    print(data["users"])
    [{'user_id': '11w', 'device_id': 'AQ', 'role': 'OWN', 'links': {'rel': 'self', 'href': 'test_link'}}]
    

    请注意,这是一个列表(“[...]”)而不是字典。要访问此列表成员,请使用整数,而不是字符串。所以下一步提取这个列表的第一个(也是唯一的)成员:

    print(data["users"][0])
    {'user_id': '11w', 'device_id': 'AQ', 'role': 'OWN', 'links': {'rel': 'self', 'href': 'test_link'}}
    

    现在我们有了嵌套字典,我们可以通过键字符串查找它:

    print(data["users"][0]["role"])
    'OWN'
    

    我们终于找到了您想要的答案。

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 2018-02-16
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多