正在python中创建嵌套列表。。。(真正的csv->;json转换)
我一直在努力解决这个问题,这个问题应该很简单——我只是对Python非常陌生,在本例中需要用到Python 我正在准备一个.csv文件,并尝试创建一个嵌套结构,以便json.dumps为我提供一个非常好的嵌套.json文件 结果json实际上有六层,但我想如果我能让底部的两层正常工作,其余的也一样。输入非常有效,因为我最终完成了构建结构的作业['fieldname']。问题是如何得到嵌套的结果 最终我想要:正在python中创建嵌套列表。。。(真正的csv->;json转换),python,json,csv,Python,Json,Csv,我一直在努力解决这个问题,这个问题应该很简单——我只是对Python非常陌生,在本例中需要用到Python 我正在准备一个.csv文件,并尝试创建一个嵌套结构,以便json.dumps为我提供一个非常好的嵌套.json文件 结果json实际上有六层,但我想如果我能让底部的两层正常工作,其余的也一样。输入非常有效,因为我最终完成了构建结构的作业['fieldname']。问题是如何得到嵌套的结果 最终我想要: "PAYLOAD": { "TEST": [ { "JOB_ONE"
"PAYLOAD": {
"TEST": [
{
"JOB_ONE": {
"details": {
"customerInformation": {
"lastName": "Chun",
"projectName": "N Pacific Recovery",
"firstName": "Wally",
"secondaryPhoneNumber": ""
},
"description": "N Pacific Garbage Sweep",
"productType": "Service Generation",
"address": {
"city": "Bristol",
"zipCodePlusSix": "",
"stateName": "",
"zipCode": "53104",
"line1": "12709 789441th Ave",
"county": "",
"stateCode": "WI",
"usage": "NA",
"zipCodePlusFour": "",
"territory": "",
}
}
}
},
{
"JOB_TWO": {
"details": {
.... similar to JOB_ONE ....
}
}
}
}],
"environment": "N. Pacific",
"requestorName": "Waldo P Rossem",
"requestorEmail": "waldo@ no where.com",
然而,下面的代码只处理“细节部分”,我最终得到了一个包含所有地址的堆栈,后面是所有客户信息。因此,循环处理所有csv记录并附加地址,然后循环csv记录并附加信息
for job in csv.DictReader(csv_file):
if not job['Cancelled']:
# actually have no idea how to get these two to work
details['description']: job['DESCRIBE']
details['projectType']: job['ProjectType']
# the following cycle through the customerInformation and then
# appends the addresses. So I end up with a large block of customer
# records and then a second block of their addresses
details['customerInformation'].append({
'lastName': "job[Lastname]",
'firstName': job['FirstName'],
'projectName':"N Pacific Prototype",
})
details['address'].append({
'city': job['City'],
'zipCode': job['Zip'],
'line1': job['Address'],
'stateCode': job['State'],
'market': job['Market']
})
我试图理解的是如何修复这个循环,使描述和项目类型显示在正确的位置,并设置数据结构,以便底部标志也能正确地用于最终json转储
这主要是因为我缺乏Python经验,但不幸的是,这是一个要求——否则,我可以在数小时前用gawk完成
请求的CSV如下:
当然。。。我花了一些时间把它虚构出来,因为上面是一个简短的片段
JobNumber,FirstName,Lastname,secondaryPhoneNumber,Market,Address,City,State,Zip,requestorName,requestorEmail,environment
22056,Wally,Fruitvale,,N. Pacific,81 Stone Church Rd,Little Compton,RI,17007,Waldo P Rossem,waldo@ no where.com,N. Pacific
22057,William,Stevens,,Southwest,355 Vt Route 8a,Jacksonville,VT,18928,Waldo P Rossem,waldo@ no where.com,N. Pacific
22058,Wallace,Chen,,Northeast,1385 Jepson Rd,Stamford,VT,19403,Waldo P Rossem,waldo@ no where.com,N.
你不远了。
您首先需要将详细信息
初始化为命令
:
details = {}
然后添加所需的元素:
details['description'] = job['DESCRIBE']
details['projectType'] = job['ProjectType']
然后对于嵌套的:
details['customerInformation'] = {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
'projectName':"N Pacific Prototype",
}
有关如何使用dict的更多详细信息,请参见:
然后您可以使用JSON.dumps(详细信息)
(此处的文档:)获取JSON
或者,您可以先收集列表中的所有详细信息,然后将列表转换为JSON
字符串:
all_details = []
for job in ...:
(build details dict)
all_details.append(details)
output = JSON.dumps(all_details)
你不远了。
您首先需要将详细信息
初始化为命令
:
details = {}
然后添加所需的元素:
details['description'] = job['DESCRIBE']
details['projectType'] = job['ProjectType']
然后对于嵌套的:
details['customerInformation'] = {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
'projectName':"N Pacific Prototype",
}
有关如何使用dict的更多详细信息,请参见:
然后您可以使用JSON.dumps(详细信息)
(此处的文档:)获取JSON
或者,您可以先收集列表中的所有详细信息,然后将列表转换为JSON
字符串:
all_details = []
for job in ...:
(build details dict)
all_details.append(details)
output = JSON.dumps(all_details)
您可以将
详细信息
dict创建为文字,而不是创建和键
赋值:
data = []
for job in csv.DictReader(csv_file):
if job['Cancelled']:
continue
details = {
'description': job['DESCRIBE'],
'projectType': job['ProjectType'],
'customerInformation' : {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
...
},
...
}
data.append(details)
json_str = json.dumps(data)
my_dict = {
"key1": "value1",
"key2": "value2",
...
}
您可以将
详细信息
dict创建为文字,而不是创建和键
赋值:
data = []
for job in csv.DictReader(csv_file):
if job['Cancelled']:
continue
details = {
'description': job['DESCRIBE'],
'projectType': job['ProjectType'],
'customerInformation' : {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
...
},
...
}
data.append(details)
json_str = json.dumps(data)
my_dict = {
"key1": "value1",
"key2": "value2",
...
}
我认为你所需要的只是了解一些关于字典的基本知识: 首次派遣:
data = []
for job in csv.DictReader(csv_file):
if job['Cancelled']:
continue
details = {
'description': job['DESCRIBE'],
'projectType': job['ProjectType'],
'customerInformation' : {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
...
},
...
}
data.append(details)
json_str = json.dumps(data)
my_dict = {
"key1": "value1",
"key2": "value2",
...
}
将键/值对写入已初始化的dict:
my_dict["key2"] = "new value"
阅读:
my_dict["key2"]
prints> "new value"
循环键:
for key in my_dict:
print(key)
prints> "key1"
prints> "key2"
循环键和值:
for key, value in my_dict.items():
...
仅循环值:
for value in my_dict.values():
...
如果你想要的只是一个JSON兼容的dict,那么你就不需要更多的东西了,不用我讨论DefaultDict、元组键等等——只要知道,一旦你了解了基本的dict、list、tuple和set,就值得一读了
编辑:还有一件事:即使是新的,我认为用Python探索您的想法也是值得的。我发现尝试并立即返回结果要快得多,因为您不必在编辑器和控制台之间切换。我认为您所需要的是了解有关词典的一些基本知识: 首次派遣:
data = []
for job in csv.DictReader(csv_file):
if job['Cancelled']:
continue
details = {
'description': job['DESCRIBE'],
'projectType': job['ProjectType'],
'customerInformation' : {
'lastName': job['Lastname'],
'firstName': job['FirstName'],
...
},
...
}
data.append(details)
json_str = json.dumps(data)
my_dict = {
"key1": "value1",
"key2": "value2",
...
}
将键/值对写入已初始化的dict:
my_dict["key2"] = "new value"
阅读:
my_dict["key2"]
prints> "new value"
循环键:
for key in my_dict:
print(key)
prints> "key1"
prints> "key2"
循环键和值:
for key, value in my_dict.items():
...
仅循环值:
for value in my_dict.values():
...
如果你想要的只是一个JSON兼容的dict,那么你就不需要更多的东西了,不用我讨论DefaultDict、元组键等等——只要知道,一旦你了解了基本的dict、list、tuple和set,就值得一读了
编辑:还有一件事:即使是新的,我认为用Python探索您的想法也是值得的。我发现尝试并立即返回结果要快得多,因为您不必在编辑器和控制台之间切换。能否请您共享CSVSure的格式。。。我花了一些时间把它捏造出来,因为上面是一个简短的片段。这里的答案对你有帮助吗!?是的,我正在完成这个过程。我还将注意到,我使用的是jupyter笔记本电脑,因此我可以立即获得反馈。您能否分享CSVSure的格式。。。我花了一些时间把它捏造出来,因为上面是一个简短的片段。这里的答案对你有帮助吗!?是的,我正在完成这个过程。我还要注意的是,我使用的是jupyter笔记本电脑,因此我可以得到即时反馈。
详细信息应该在每个循环中创建新的,所以不会在循环之外创建。回答很好,而且很有效。我最后使用了AChampion的评论,因为它看起来更直接。然而,我也很欣赏使用dict的提示。在几分钟内,我已经从垃圾变成了真正的结束,谢谢你。细节应该在每个循环中创建新的,所以不会在循环之外创建它。回答得很好,而且很有效。我最后使用了AChampion的评论,因为它看起来更直接。然而,我也很欣赏使用dict的提示。几分钟之内,我就从垃圾桶变成了真正的垃圾桶,谢谢你们。