python嵌套列表/字典和弹出值

时间:2015-08-03 15:25:23

标签: python dictionary nested-lists

提前道歉,因为这是一个新手问题。我刚刚开始编写python,并且我已经对嵌套字典/列表中的弹出值感到困惑,所以我很感激任何帮助!

我有这个示例json数据:

{ "scans": [
   { "status": "completed", "starttime": "20150803T000000", "id":533},
   { "status": "completed", "starttime": "20150803T000000", "id":539}
] }

我想点一下' 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)

似乎无法正常工作,因为嵌套的键/值在列表中。即

>>> 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

有人能指出我正确的方向让这个工作吗?我的长期目标是创建一个for循环,将所有id放入另一个我可以用于另一个函数的字典或列表中。

2 个答案:

答案 0 :(得分:2)

json_data['scans']返回一个dicts列表,你试图使用一个str []["id"]来索引列表,但由于显而易见的原因而失败,所以你需要使用索引来获取每个子元素:

print json_data['scans'][0]['id'] # -> first dict
print json_data['scans'][1]['id'] # -> second dict

或者看到所有id遍历使用json_data["scans"]返回的dicts列表:

for dct in json_data["scans"]:
    print(dct["id"]) 

要保存附加到列表:

all_ids = []
for dct in json_data["scans"]:
    all_ids.append(dct["id"])

或使用列表comp:

all_ids = [dct["id"] for dct in json_data["scans"]]

如果有可能键id可能不在每个词典中,请在访问前使用in进行检查:

all_ids = [dct["id"] for dct in json_data["scans"] if "id" in dct]

答案 1 :(得分:0)

在这里,您如何迭代项目并提取所有ID:

json_data = ...
ids = []
for scan in json_data['scans']:
    id = scan.pop('id')
    # you can use get instead of pop
    # then your initial data would not be changed, 
    # but you'll still have the ids
    # id = scan.get('id')
    ids.append();

这种方法也有效:

ids = [item.pop('id') for item in json_data['scans']]