Python词典:将多个值列表合并为一个唯一值列表
发布时间:2020-12-20 13:36:13 所属栏目:Python 来源:网络整理
导读:我只是使用 Python 2.7学习 Python.我有一个包含两列的csv文件.列是: Coll_id:条目可以是单个收集者,也可以是组 Participant_Coll_id:如果Coll_id是单个收集器,则该值将为null.如果Coll_id是一个组,那么该组中的每个参与者将只有一行. 样本在这里: Coll_
我只是使用
Python 2.7学习
Python.我有一个包含两列的csv文件.列是:
Coll_id:条目可以是单个收集者,也可以是组 Participant_Coll_id:如果Coll_id是单个收集器,则该值将为null.如果Coll_id是一个组,那么该组中的每个参与者将只有一行. 样本在这里: Coll_id,Participant_Coll_id<br> ARA,ARG ARA,RAT ARG,NULL BRSAR,SGMB BRSAR,SANTM BRSAR,CRSR BRSAR,RAT CRSR,NULL DBY,NULL HZIE,NULL RAT,NULL SANTM,NULL SGMB,NULL ARG,NULL DRS,CRSR DRS,RAT DRS,ARG 对于每个收集器(coll_id),我正在尝试创建他们收集的所有其他收集器的列表.我试图将代码拉到一起来执行以下操作,它现在非常接近: #This is giving me a dictionary with each COLL_ID having a list of PARTICIPANT_COLL_IDs with open('colls_mv1.csv','r') as f: reader = csv.DictReader(f,['COLL_ID','PARTICIPANT_COLL_ID']) data1 = defaultdict(list) for line in reader: data1[line['COLL_ID']].append(line['PARTICIPANT_COLL_ID']) #And this is giving me a dictionary with each PARTICIPANT_COLL_ID having a list of COLL_IDs with open('colls_mv1.csv','PARTICIPANT_COLL_ID']) data2 = defaultdict(list) for line in reader: if line['PARTICIPANT_COLL_ID'] != 'NULL': data2[line['PARTICIPANT_COLL_ID']].append(line['COLL_ID']) dict3 = {k: [data1[i] for i in v] for k,v in data2.items()} print dict3 我得到以下输出: {'SGMB': [['SGMB','SANTM','CRSR','RAT']],'CRSR': [['SGMB','RAT'],['CRSR','RAT','ARG']],'RAT': [['ARG',['SGMB','PARTICIPANT_COLL_ID': [['PARTICIPANT_COLL_ID']],'ARG': [['ARG','SANTM': [['SGMB','RAT']]} 我想要的是将值列表合并为每个键,删除重复项并从值列表中删除键: {'SGMB': ['SANTM','CRSR': ['SGMB','ARG'],'RAT': ['ARG','SGMB','CRSR'],'ARG': ['RAT','SANTM': ['SGMB','RAT']} 解决方法
迭代列表,删除密钥和重复数据删除
>>> res = {'SGMB': [['SGMB','RAT']]} >>> newres = {k: list({x for t in v for x in t if x != k}) for k,v in res.iteritems()} >>> newres {'SGMB': ['CRSR','CRSR': ['SANTM','RAT': ['CRSR','PARTICIPANT_COLL_ID': [],'ARG': ['CRSR','SANTM': ['CRSR','SGMB']} 演示:http://ideone.com/87HKM9 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |