4
我只是在使用Python 2.7學習Python。我有一個有兩列的csv文件。的列有:Python字典:將多個值列表合併爲一個唯一值列表
Coll_id:條目可以是單收集器,或者可以是基團
Participant_Coll_id:如果Coll_id是單個收集器,則該值將是零。如果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', 'r') as f:
reader = csv.DictReader(f, ['COLL_ID', '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', 'SANTM', 'CRSR', 'RAT'], ['CRSR', 'RAT', 'ARG']], 'RAT': [['ARG', 'RAT'], ['SGMB', 'SANTM', 'CRSR', 'RAT'], ['CRSR', 'RAT', 'ARG']], 'PARTICIPANT_COLL_ID': [['PARTICIPANT_COLL_ID']], 'ARG': [['ARG', 'RAT'], ['CRSR', 'RAT', 'ARG']], 'SANTM': [['SGMB', 'SANTM', 'CRSR', 'RAT']]}
我想什麼是合併值列表一起用於每個鍵,刪除重複,併除去從值列表中的鍵:
{'SGMB': ['SANTM', 'CRSR', 'RAT'], 'CRSR': ['SGMB', 'SANTM', 'RAT', 'ARG'], 'RAT': ['ARG', 'SGMB', 'SANTM', 'CRSR'], 'PARTICIPANT_COLL_ID': [['PARTICIPANT_COLL_ID']], 'ARG': ['RAT', 'CRSR'], 'SANTM': ['SGMB', 'CRSR', 'RAT']}
這是如此接近 - 非常感謝!我只需要找到一種方法來刪除每個列表中的重複項,並準確計算出我剛剛使用的代碼的含義:) – botanist
使用設置和列表轉換可以刪除重複項,請參閱我的編輯。 – DhruvPathak
這真是太棒了!非常感謝你的幫助。它正是我想要它做的。 – botanist