是否有一种pythonic方法可以合并用于csv操作的重复命令?

是否有一种pythonic方法可以合并用于csv操作的重复命令?,python,csv,dictionary,repeat,Python,Csv,Dictionary,Repeat,输出工作,它做了我需要做的事情,但是有没有一种更像python的方法呢? 我基本上是在尝试通过csv进行过滤,找到每个患者的全部独特元素 我必须以这种特定的方式编写代码,以确保数据正确对齐,而不会丢失格式。我只是想知道有没有更像蟒蛇的方法?我甚至会使用资源而不是代码。我只是想提高效率。我仍然是一名python新手,并且由于我只能使用导入csv、os和字符串而受到限制。 我的行从第5行到第15行开始的原因是我不需要第1-4列中的任何内容 我的代码如下: diagnosiscoun

输出工作,它做了我需要做的事情,但是有没有一种更像python的方法呢? 我基本上是在尝试通过csv进行过滤,找到每个患者的全部独特元素

我必须以这种特定的方式编写代码,以确保数据正确对齐,而不会丢失格式。我只是想知道有没有更像蟒蛇的方法?我甚至会使用资源而不是代码。我只是想提高效率。我仍然是一名python新手,并且由于我只能使用导入csv、os和字符串而受到限制。
我的行从第5行到第15行开始的原因是我不需要第1-4列中的任何内容

我的代码如下:


        diagnosiscounts = csv.reader(self.unique_diagnosis)
        patID = []
        cd1 = []
        cd2 = []
        cd3 = []
        cd4 = []
        cd5 = []
        cd6 = []
        cd7 = []
        cd8 = []
        cd9 = []
        

        test = {}
        diag = {}
        hjj = {}
        for row in diagnosiscounts:
            patID.append(row[0])
            cd1.append(row[5])
            cd2.append(row[6])
            cd3.append(row[7])
            cd4.append(row[8])
            cd5.append(row[9])
            cd6.append(row[10])
            cd7.append(row[11])
            cd8.append(row[12])
            cd9.append(row[13])
            
        
        dg1 = tuple(zip(patID,cd1))
        dg2 = tuple(zip(patID,cd2))
        dg3 = tuple(zip(patID,cd3))
        dg4 = tuple(zip(patID,cd4))
        dg5 = tuple(zip(patID,cd5))
        dg6 = tuple(zip(patID,cd6))
        dg7 = tuple(zip(patID,cd7))
        dg8 = tuple(zip(patID,cd8))
        dg9 = tuple(zip(patID,cd9))
        

        for k, v in dg1:
            test.setdefault(k,[]).append(v)
        for k, v in dg2:
            test.setdefault(k,[]).append(v)
        for k, v in dg3:
            test.setdefault(k,[]).append(v)
        for k, v in dg4:
            test.setdefault(k,[]).append(v)
        for k, v in dg5:
            test.setdefault(k,[]).append(v)
        for k, v in dg6:
            test.setdefault(k,[]).append(v)
        for k, v in dg7:
            test.setdefault(k,[]).append(v)
        for k, v in dg8:
            test.setdefault(k,[]).append(v)
        for k, v in dg9:
            test.setdefault(k,[]).append(v)
        
        
        for k, v in test.items():
            tp = []
            for i in v:
                if i != '':
                    tp.append(i)
            diag[k] = set(tp)
        
        for k,v in diag.items():
            hjj[k] = len(v)

        print(hjj)
我的csv文件的结构如下所示:

Patient_ID      ICD9_DGNS_CD_1  ICD9_DGNS_CD_2  ICD9_DGNS_CD_3  ICD9_DGNS_CD_4  ICD9_DGNS_CD_5 ICD9_DGNS_CD_6   ICD9_DGNS_CD_7  ICD9_DGNS_CD_8  ICD9_DGNS_CD_9  ICD9_DGNS_CD_10
00013D2EFD8E45D1    5.42192E+14 4824842417          V5841                                   
00016F745862898F    5.42272E+14 2963419753         2963419753   V5832              V5861    2724    3182    V5869   42731               
00016F745862898F    5.42282E+14 5737807753         5737807753   9594               E9174    4019                            
0001FDD721E223DC    5.42642E+14 1233847710          78943          V5866           V1272                            
00024B3D2352D2D0    5.42242E+14 9688809345          6009                                    
00024B3D2352D2D0    5.42442E+14 4199631965          6115                                    
00024B3D2352D2D0    5.42422E+14 1449018601          2723                                    
00024B3D2352D2D0    5.42372E+14 5972737463          V821                                    
0002F28CE057345B    5.42052E+14                                                                                546645             3255             4566                     45974
0002F28CE057345B    5.42162E+14 7985077191          7902                                    
0002F28CE057345B    5.42192E+14 420175516           7232                                    
0002F28CE057345B    5.42342E+14 7535793863          25012          V5867                                
0002F28CE057345B    5.42472E+14 6022067668          59781                                   
0002F28CE057345B    5.42892E+14                     3482            3569    3320        

对我来说,这不是一个好的代码结构,我想把它做得更好。

你可以列出你想要操作的对象,然后遍历该列表并执行操作。例如:

cd_list=[list()表示范围(10)内的_]
指数=[0,5,6,7,8,9,10,11,12,13]
测试={}
diag={}
hjj={}
对于诊断中的行:
对于索引,zip中的cd_obj(索引,cd_列表):
cd_对象附加(行[索引])
dg_list=list(映射(lambda cd_obj:tuple(patID,cd_obj,cd_list))
对于dg_清单中的dg_obj:
对于dg_obj中的k,v:
test.setdefault(k,[]).append(v)
如果没有直接测试的对象,这应该是可行的,但我不能确定


注意:一般情况下,如果你发现自己重复一次或两次以上的动作,你的<强>第一条/强>本能应该考虑如何使用循环来更有效地完成它。

我认为你所寻找的是一种更优雅的组合组合方式。

也许是这样或这样的组合:

from collections import defaultdict

diagnosiscounts = [
    ('00013D2EFD8E45D1', '5.42192E+14', '4824842417'),
    ('00016F745862898F', '5.42272E+14', '2963419753'),
]

data = defaultdict(list)
data_by_patient = {}
for row in diagnosiscounts:
    for i, c in enumerate(('Patient_ID', 'ICD9_DGNS_CD_1', 'ICD9_DGNS_CD_2')):
        data[c].append(row[i])
        data_by_patient[row[0]] = row[1:]

根据需要在enumerate下添加更多列。!谢谢你帮助我!我真的在为循环工作,但在使用循环时遇到了一些问题。不幸的是,我也不能在我的函数中使用lambda。我可以帮助您解决
lambda
的具体问题吗@VSI无法使用lambda。lambda没有问题,对于分配,我根本不能使用lambda。任何
lambda
函数都可以被命名函数替换,所以这应该不是什么大问题-如果您有任何问题,请告诉我!