Python 基于相同的键创建嵌套列表

Python 基于相同的键创建嵌套列表,python,json,Python,Json,我正在尝试读取csv文件并基于同一个键组合值,并且一个文件中有多个键。 我希望基于同一个键聚合记录,以便以后可以从列表中访问这些记录,并将其作为JSON请求中的值传递给API csv文件: 代码 import csv with open('JsonRequestPricingMedical.csv','r') as f: reader = csv.reader(f) next(reader) for row in reader: print(row) 代

我正在尝试读取csv文件并基于同一个键组合值,并且一个文件中有多个键。 我希望基于同一个键聚合记录,以便以后可以从列表中访问这些记录,并将其作为JSON请求中的值传递给API

csv文件:

代码

import csv
with open('JsonRequestPricingMedical.csv','r') as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        print(row)
代码输出:

所需输出:

末尾有两个嵌套列表

['18A000730400', '101924200', 'M', 'M', '002664514003', '585', [['1', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1'],['2', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1']],[['U', 'H43393'],['U', 'H43394']]]
我的目标是实现以下布局。。我想一旦我得到了所需列表格式的数据,我就可以从列表中获取值并传递它

Json布局:

[
  {
   "claimsHeader":" {
    "claimId": "18A000730400",
    "subscriberId": "101924200",
    "claimType":{
                    "code": "M"
                },
     "claimSubType": {
                    "code": "M"
                },  
     "providerId" :"002664514003",
     "totalChargeAmt": "585",
     "claimLineDetail" :[
                {
                "claimLineNo": "1",
                 "placeOfService": {
                           "code": "11"
                },
                 "procedureCode": {
                        "code": "92014"
                },
                "subDiagnosisCd": {
                        "code": "H43393"
                },
                "svcLineFromDt": "2017-06-19",
                "svcLineToDt": "2017-06-19",
                "chargedAmt": "160",
                "clmLineUnits": "1",
                },
                {
                "claimLineNo": "2",
                 "placeOfService": {
                           "code": "12"
                },
                 "procedureCode": {
                        "code": "92015"
                },
                "subDiagnosisCd": {
                        "code": "H433945
                },
                "svcLineFromDt": "2017-06-19",
                "svcLineToDt": "2017-06-19",
                "chargedAmt": "160",
                "clmLineUnits": "2",
                }
     ],
     {
        "claimSpecDiag": [

            "presentOnAdmit": "",
            "diagnosisCode": "H43393",

         },
         {
            "presentOnAdmit": "",
            "diagnosisCode": "H43394",
         }

    ]   
  }
]

检查是否有多个ID相同的条目(行)。如果有,将它们读入列表并开始创建结果列表:

[['18A000730400', '101924200', 'M', 'M', '002664514003', '585', '1', '11', '92014', 'H43393', '2017-06-19', '2017-06-19', '160', '1', 'U', 'H43393']
['18A000730400', '101924200', 'M', 'M', '002664514003', '585', '2', '11', '92014', 'H43393', '2017-06-19', '2017-06-19', '160', '2', 'U', 'H43394']]

# result list for now
['18A000730400', '101924200', 'M', 'M', '002664514003', '585']
然后,从每个条目为列表列表中需要的列创建一个列表。因为您从csv中知道原始列表中元素的索引,所以您可以通过列表切片轻松做到这一点:

[['1', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1'],['2', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1']]

[['U', 'H43393'],['U', 'H43394']]
创建时,只需将其附加到结果列表中


这有点难以解释,但我希望这能给你一个想法。如果您需要,请随时要求我澄清任何部分:)

您能解释输出吗?为什么先在不同的键(1/2)上拆分,然后在同一个键(u/u)上拆分?还有,你打算用它实现什么?您如何知道前两个列表中的哪一个属于后两个列表中的哪一个?为了保持一致性,第一部分不应该也是嵌套列表吗?如果有两个以上的列表,可能会有更复杂的“重叠”呢?我已经更新了我正在尝试实现的json布局。。除了先创建一个列表,然后从列表中读取值之外,我想不出其他方法。。因为我们在json请求的底部有嵌套。。我想只在顶部创建它,并在需要的地方传递它。你有哪些尝试不起作用?
[['18A000730400', '101924200', 'M', 'M', '002664514003', '585', '1', '11', '92014', 'H43393', '2017-06-19', '2017-06-19', '160', '1', 'U', 'H43393']
['18A000730400', '101924200', 'M', 'M', '002664514003', '585', '2', '11', '92014', 'H43393', '2017-06-19', '2017-06-19', '160', '2', 'U', 'H43394']]

# result list for now
['18A000730400', '101924200', 'M', 'M', '002664514003', '585']
[['1', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1'],['2', '11', '92014', 'H43393','2017-06-19', '2017-06-19', '160', '1']]

[['U', 'H43393'],['U', 'H43394']]