【问题标题】:Nested dictionary access is returning a list嵌套字典访问正在返回一个列表
【发布时间】:2020-10-16 14:57:40
【问题描述】:

我遇到的问题是,当我尝试访问嵌套字典中的值时,我不能,因为它返回的是列表而不是字典。

我有一个这种格式的 .json 文件;

{
    "users": [
        {
            "1": {
                "1": "value",
                "2": "value"
            }
        }
    ]
}

我加载 .json 文件,并使用此函数访问我想要的值

def load_json(fn):
    with open(fn) as pf:
        data = json.load(pf)
        return data['users']['1']['2']

如果我只是简单地做return data,它是一个字典,但如果尝试通过添加['users'] 进一步访问,它会变成一个列表,如果我尝试访问其中的键 #1 或 #2,则会出现索引错误那个..

例如,我的目标是获取嵌套键 #2 的值,理想情况下不需要循环遍历它。

【问题讨论】:

  • data['users'] 是嵌套字典的列表,您需要在字典键之前使用列表索引,即data['users'][0]['1']['2']

标签: python list dictionary nested


【解决方案1】:

给定你的数据结构,并遵循它:

  • data 是一本字典 - 有一个键“用户”和一个列表值
  • data['users'] 是一个列表 - 一个条目
  • data['users'][0] 是一个字典 - 有一个键 '1' 和一个字典的值
  • data['users'][0][1] 是一个字典 - 有两个键 '1' 和 '2'

所以你需要做:

def load_json(fn):
    with open(fn) as pf:
        data = json.load(pf)
        return data['users'][0]['1']['2']

【讨论】:

    【解决方案2】:

    您的 JSON 包含一个数组 (Python list),其中包含内部 dicts(这就是您的 JSON 中的 [] 表示的内容)。您需要做的就是改变:

        return data['users']['1']['2']
    

    到:

        return data['users'][0]['1']['2']
                          # ^^^ Added
    

    索引list 以进入内部dicts。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多