加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读