私はPython 2.7を使ってPythonを学んでいます。2 つの列を持つ csv ファイルがあります。列は次のとおりです。
Coll_id: エントリは単一のコレクタまたはグループの場合があります
Participant_Coll_id: Coll_id が単一のコレクターの場合、値は null になります。Coll_id がグループの場合、グループ内の参加者ごとに 1 つの行があります。
サンプルは次のとおりです。
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']}