dob*_*bbs 5 python dictionary nested-lists
事先道歉,这是一个新手问题.我刚刚开始编写python,我一直对嵌套字典/列表中的弹出值感到困惑,所以我感谢任何帮助!
我有这个示例json数据:
{ "scans": [
{ "status": "completed", "starttime": "20150803T000000", "id":533},
{ "status": "completed", "starttime": "20150803T000000", "id":539}
] }
Run Code Online (Sandbox Code Playgroud)
我想从"扫描"键中弹出"id".
def listscans():
response = requests.get(scansurl + "scans", headers=headers, verify=False)
json_data = json.loads(response.text)
print json.dumps(json_data['scans']['id'], indent=2)
Run Code Online (Sandbox Code Playgroud)
似乎没有工作,因为嵌套的键/值在列表中.即
>>> print json.dumps(json_data['scans']['id'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向让这个工作?我的长期目标是创建一个for循环,将所有id放入另一个我可以用于另一个函数的字典或列表中.
json_data['scans']返回一个字典列表,您尝试使用 str ie 对该列表进行索引,[]["id"]但由于明显的原因而失败,因此您需要使用索引来获取每个子元素:
print json_data['scans'][0]['id'] # -> first dict
print json_data['scans'][1]['id'] # -> second dict
Run Code Online (Sandbox Code Playgroud)
或者查看所有 id 对返回的字典列表的迭代json_data["scans"]:
for dct in json_data["scans"]:
print(dct["id"])
Run Code Online (Sandbox Code Playgroud)
要将追加保存到列表:
all_ids = []
for dct in json_data["scans"]:
all_ids.append(dct["id"])
Run Code Online (Sandbox Code Playgroud)
或者使用列表比较:
all_ids = [dct["id"] for dct in json_data["scans"]]
Run Code Online (Sandbox Code Playgroud)
如果密钥可能id不在每个字典中,请in在访问之前进行检查:
all_ids = [dct["id"] for dct in json_data["scans"] if "id" in dct]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |