在字典中打印值

时间:2018-01-09 20:38:17

标签: python json

我无法在我的python dictionairy中获取从json文件创建的值,以便打印。这是我的JSON:

{
  "Questions": [
    {
      "Q1":"What is capital of egypt?",
      "T":"London",
      "2":"France",
      "3":"Egypt"
    },

    {
      "Q2":"What is capital of USA?",
      "T":"London",
      "2":"France",
      "3":"Egypt"
    }
  ]
}

这是我的python:

import json
with open("questions.json") as f:
    data = json.load(f)

print(data["Questions"]["Q1"])

返回错误:list indices必须是整数或切片,而不是str

我做错了什么?我已经检查了打印的语法,这一切似乎都是正确的。

3 个答案:

答案 0 :(得分:3)

一个好的策略是首先删除代码直到它工作。例如,而不是

print(data["Questions"]["Q1"])`

你应该试试

print(data["Questions"])`

此输出是

[{'Q1': 'What is capital of egypt?', 'T': 'London', '2': 'France', '3': 'Egypt'}, 
{'Q2': 'What is capital of USA?', 'T': 'London', '2': 'France', '3': 'Egypt'}]

从那里,您可以尝试像在问题中那样进行索引:

[{'Q1': 'What is capital of egypt?', 'T': 'London', '2': 'France', '3': 'Egypt'}, 
{'Q2': 'What is capital of USA?', 'T': 'London', '2': 'France', '3': 'Egypt'}]['Q1']

除非没有意义,因为你试图索引列表,列表中的索引是整数,而不是字符串。

因此,为了获得您期望的结果,您应该使用data["Questions"][0]来索引第一个问题。

在我看来,更好的解决方案是将JSON的结构更改为更有意义的内容。我就是这样做的:

{
    "Questions": {
        "Q1": {
            "Q":"What is capital of egypt?",
            "T":"London",
            "2":"France",
            "3":"Egypt"
        },

        "Q2" : {
            "Q":"What is capital of USA?",
            "T":"London",
            "2":"France",
            "3":"Egypt"
        }
    }
}

现在,您可以像预期一样使用Q1Q2执行查找。

答案 1 :(得分:1)

Questions的值是一个列表。与错误一样,索引必须是整数。

第一个问题是data["Questions"][0],第二个问题是data["Questions"][1],依此类推。

如果你想要" Q1"的价值对于第一个问题,您需要使用data["Questions"][0]["Q1"]

答案 2 :(得分:0)

试试这段代码:

import json
with open("questions.json") as f:
    data = json.load(f)

print(data["Questions"][0]["Q1"], data["Questions"][1]["Q1"])