简化 Python 中多重散列的使用

我有一个大约 700 行和 3 列的 CSV 文件,其中包含label,rgb和string信息,例如:


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

该应用程序是sumple但需要一个独特的独特的字典每一种关系(rgb2label,rgb2str,str2rgb,str2label,等...)。


是否存在具有相同易用性的更紧凑的解决方案?


狐的传说
浏览 182回答 1
1回答

偶然的你

在这里,您将自己限制在一对一的词典中,因此最终会得到大量词典(此处为 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']"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python