簡體   English   中英

簡化 Python 中多重散列的使用

[英]Simplify the use of multiple hashings in Python

我有一個大約有 700 行和 3 列的 CSV 文件,其中包含labelrgbstring信息,例如:

str;      rgb;                   label;         color
bones;    "['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']"

該應用程序很簡單,但對於每個關系( rgb2labelrgb2strstr2rgbstr2label等)都需要一個唯一的字典。

是否存在具有相同易用性的更緊湊的解決方案?

在這里,您將自己限制在一對一的詞典中,因此最終會得到大量詞典(此處為 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']"

您也可以通過將您的行轉換為dict來使這一點更清楚:

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']"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM