简化Python中多个哈希的使用

2024-09-28 12:12:00 发布

您现在位置: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)

我想创建一个简单的方法,将一个唯一的输入转换为一个唯一的输出

一种解决方案是将所有roisplayColor条目与相应的标签条目作为字典进行散列,例如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,等等)

是否有一个更紧凑、使用更方便的解决方案?


Tags: 文件csvstring字典条目rgb解决方案label
1条回答
网友
1楼 · 发布于 2024-09-28 12:12:00

在这里,您将自己限制为一对一的字典,因此最终会有大量的字典(这里是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']"

相关问题 更多 >

    热门问题