То, что вы ищете, это словарь данных. В Pydicom вы можете найти его здесь:
pydicom.datadict.DicomDictionary
но это диктат кортежей, который на самом деле не подходит для доступа с помощью точечной нотации. Например, чтобы получить 'SeriesTime', вам нужно написать pydicom.datadict.DicomDictionary[524337][4]
, который не может быть прочитан или гарантированно останется действительным при обновлениях Pydicom (хотя я сомневаюсь, что он будет часто меняться, если вообще будет).
Вы можете реализовать это самостоятельно, используя именованный кортеж:
from collections import namedtuple
import pydicom
def get_dict_as_namedtuple(pdict):
# some keywords are empty, check for those
keywords_list = [pdict[i][4] for i in pdict if pdict[i][4].strip() != '']
Keywords = namedtuple('Keywords', keywords_list)
# unpack the list as positional arguments
return Keywords(*keywords_list)
dicom_tags = get_dict_as_namedtuple(pydicom.datadict.DicomDictionary)
print(dicom_tags.SeriesTime)
# prints 'SeriesTime'
Или мое первоначальное, менее изящное решение (автозаполнение вкладок у меня не работает с этим решением):
(пример кода для AttributeDict из кодовой базы Fabric найден через этот ответ )
import pydicom
class AttributeDict(dict):
def __getattr__(self, key):
try:
return self[key]
except KeyError:
# to conform with __getattr__ spec
raise AttributeError(key)
def __setattr__(self, key, value):
self[key] = value
def first(self, *names):
for name in names:
value = self.get(name)
if value:
return value
def get_data_dict(pydicom_data_dict):
data_dict = AttributeDict({})
for entry in pydicom_data_dict:
keyword = pydicom_data_dict[entry][4]
data_dict[keyword] = keyword
return data_dict
pydicom_data_dict = get_data_dict(pydicom.datadict.DicomDictionary)
print(pydicom_data_dict.SeriesTime)
#prints 'SeriesTime'