我有一個大約 700 行和 3 列的 CSV 文件,其中包含label,rgb和string信息,例如:str; rgb; label; colorbones; "['255','255','255']"; 2; (241,214,145)Aorta; "['255','0','0']"; 17; (216,101,79)VenaCava; "['0','0','255']"; 16; (0,151,206)我想創建一種簡單的方法來將一個唯一的輸入轉換為一個唯一的輸出。一種解決方案是使用相應的標簽條目作為字典散列所有 ROIDisplayColor 條目,例如rgb2label:with open("c:\my_file.csv") as csv_file: rgb2label, label2rgb = {}, {} # rgb2str, label2str, str2label... for row in csv.reader(csv_file): rgb2label[row[1]] = row[2] label2rgb[row[2]] = row[1]這可以簡單地使用如下:>>> rgb2label[ "['255','255','255']"]'2'>>> label2rgb['2']"['255','255','255']"該應用程序是sumple但需要一個獨特的獨特的字典每一種關系(rgb2label,rgb2str,str2rgb,str2label,等...)。是否存在具有相同易用性的更緊湊的解決方案?
1 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
在這里,您將自己限制在一對一的詞典中,因此最終會得到大量詞典(此處為 4^2=16)。
您可以改為使用一對多字典,因此您將只有 4 個:
for row in csv.reader(csv_file):
rgb[row[1]] = row
label[row[2]] = row
你會像這樣使用:
>>> rgb[ "['255','255','255']"][2]
'2'
>>> label['2'][1]
"['255','255','255']"
您也可以通過將您的行變成 adict來更清楚地說明這一點:
for row in csv.reader(csv_file):
name, rgb, label, color = row
d = {"rgb": rgb, "label": label}
rgb[row[1]] = d
label[row[2]] = d
你會像這樣使用:
>>> rgb[ "['255','255','255']"]["label"]
'2'
>>> label['2']["rgb"]
"['255','255','255']"
添加回答
舉報
0/150
提交
取消