我正在使用Python 3.6
我有一个字典列表(如下),并且想为数据中的每个记录返回以下值:id
,name
,color
。我似乎无法弄清楚如何遍历数据集中的所有“页面”以返回所有值。我已经深入到下面包含的for
循环,但这仅返回第一页的数据,而没有返回其他数据。我正在寻找的最终状态将返回我在for
循环中具有的结构中的数据,但对于所有页面。
我的数据和for循环:
mydict = [
{
"page": 1,
"data":[
{
"id": 11111,
"name": "smith",
"color": "orange",
"subsidiary": "no"
},
{
"id": 22222,
"name": "smith",
"color": "orange",
"subsidiary": "yes",
"subsidiaries": [
{
"id": 33333,
"name": "alpha",
"color": "blue"
},
{
"id": 44444,
"name": "alpha",
"color": "blue"
}
],
"last_updated": 123456789
}
]
},
{
"page": 2,
"data":[
{
"id": 55555,
"name": "smith",
"color": "orange",
"subsidiary": "no"
},
{
"id": 66666,
"name": "smith",
"color": "orange",
"subsidiary": "yes",
"subsidiaries": [
{
"id": 77777,
"name": "alpha",
"color": "blue"
},
{
"id": 88888,
"name": "alpha",
"color": "blue"
}
],
"last_updated": 987654321
}
]
}
]
for i in mydict[0]['data']:
print ({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
返回:
{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'}
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'}
答案 0 :(得分:1)
您有一个字典列表,而不是列表字典。因此,您可以使用嵌套的for
循环:
for d in mydict:
for i in d['data']:
print({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
要将结果存储在词典列表中,而不仅仅是打印,您可以追加到列表中:
L = []
for d in mydict:
for i in d['data']:
L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
更有效地,您可以使用等效的列表理解:
L = [{"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']} \
for d in mydict for i in d['data']]
print(L)
[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'}]
以下是捕获辅助数据(如果存在)的示例:
L = []
for d in mydict:
for i in d['data']:
L.append({"cust_id": i['id'], "cust_name": i['name'], "fabric_color": i['color']})
if 'subsidiaries' in i:
for s in i['subsidiaries']:
L.append({"cust_id": s['id'], "cust_name": s['name'], "fabric_color": s['color']})
print(L)
[{'cust_id': 11111, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 22222, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 33333, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 44444, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 55555, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 66666, 'cust_name': 'smith', 'fabric_color': 'orange'},
{'cust_id': 77777, 'cust_name': 'alpha', 'fabric_color': 'blue'},
{'cust_id': 88888, 'cust_name': 'alpha', 'fabric_color': 'blue'}]
答案 1 :(得分:0)
做这样的事情。
mydict = []
for page in mydict:
print(page['page'])
for data in page['data']:
print ({"cust_id": data['id'], "cust_name": data['name'], "fabric_color":data['color']})
只有当元素多于1个时,您才迭代字典的第一个索引。