Упростите использование нескольких хеширований в Python - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть CSV-файл с 700 строками и 3 столбцами, содержащий информацию 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']"

Приложение является полным, но для каждого отношения требуется уникальный уникальный словарь (rgb2label, rgb2str, str2rgb, str2label и т. д.).

Существует ли более компактное решение с такой же простотой использования?

1 Ответ

0 голосов
/ 14 февраля 2019

Здесь вы ограничиваетесь словарями «один-к-одному», так что в итоге вы получаете множество из них (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']"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...