[英]List comprehension with nested dictionaries
我正在尝试实例化下面描述的对象,这些对象基于下面 json 数据中可见的嵌套字典formInstances['responses']
,
class
class ReponseGroupInstance:
def __init__(self, id, questions,parentId):
self.id = id
self.questions = questions
self.parentId = parentId
json 数据
data = r'''{
"formInstances": [
{
"formVersion": 1.0,
"deviceIdentifier": "cheaper",
"dataPointId": "439350001",
"submissionDate": "2022-10-04T08:21:08Z",
"modifiedAt": "2022-10-04T09:36:04.187Z",
"id": "405190001",
"responses": {
"388540003": [
{
"382720001": {
"filename": "HELP!",
"location": null
},
"382720002": "12",
"382720003": [
{
"text": "Median"
}
]
}
],
"388540001": [
{
"386430059": "2020-10-04T08:19:37.673Z",
"386430060": "t",
"386430061": [
{
"text": "MamaZoe"
}
],
"386430062": [
{
"text": "Train"
}
],
"386430063": [
{
"text": "Now"
}
],
"386430064": {
"lat": -100.3582283333333334,
"long": 500.92758333333334,
"elev": 21512,
"code": null
}
}
]
},
"identifier": "qasddqt-asdas-r1er",
"displayName": "asjdasd",
"formId": "4521354",
"surveyalTime": 515,
"submitter": "papa-noel",
"createdAt": "2020-1-0904T09:35:59.556Z"
}
],
}'''
我面临的挑战是ReponseGroupInstance.parentId
对应的数据点是我循环的嵌套字典之外的字典的键。
我已经能够通过嵌套的 for 循环和构造函数解决这个问题,如下所示,并尝试使用并行列表理解,如下所示,但没有成功——给定嵌套字典之外的列表属性的不同列表长度不使用我的 zip() 方法。
for循环
def question_group_instance_factory(id, questions,parentId):
return QuestionGroupInstance(id, questions,parentId)
for form_instance in data["formInstances"]:
parent_id = form_instance['id']
for id,questions in form_instance['responses'].items():
question_group_instance_factory(id,questions,parent_id)
列表理解尝试
l_question_g_val = [[question_g_val[0] for question_g_val in form_instance['responses'].values()] for form_instance in data["formInstances"]]
l_question_g_key = [[question_g_key for question_g_key in form_instance['responses'].keys()] for form_instance in data["formInstances"]]
l_form_parent_id = [form_instance['id'] for form_instance in data["formInstances"]]
pprint([question_group_instance_factory(id,questions,parent_id)for id,questions,parent_id in zip(*l_question_g_key,*l_question_g_val,l_form_parent_id)])
我怎样才能避免 for 循环? 最好通过列表理解?
谢谢!
class FormResponse:
def __init__(self, response_id, form_name, form_id, date_submitted, form_data):
self.response_id = response_id
self.form_name = form_name
self.form_id = form_id
self.date_submitted = date_submitted
self.form_data = form_data
The function should take the json data as an argument and return a list of FormResponse objects.
JSON data:
{
"formInstances": {
"formName": "My Form",
"formId": "12345",
"responses": [
{
"response_id": "1",
"date_submitted": "2020-07-31T20:49:12.000Z",
"form_data": {
"name": "John Doe",
"age": "30",
"gender": "Male"
}
},
{
"response_id": "2",
"date_submitted": "2020-07-31T20:49:12.000Z",
"form_data": {
"name": "Jane Doe",
"age": "25",
"gender": "Female"
}
}
]
}
}
def instantiate_form_responses(json_data):
form_responses = []
form_name = json_data['formInstances']['formName']
form_id = json_data['formInstances']['formId']
responses = json_data['formInstances']['responses']
for response in responses:
response_id = response['response_id']
date_submitted = response['date_submitted']
form_data = response['form_data']
form_response = FormResponse(response_id, form_name, form_id, date_submitted, form_data)
form_responses.append(form_response)
return form_responses
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.