Element VRs and Python typesΒΆ

DICOM elements can contain anything from ASCII strings to unicode text, decimals, floats, signed and unsigned integers of different byte-depth and even encoded data. The format of the value of an element is given by its Value Representation or VR, and a list of VRs is given in the DICOM Standard in Part 5, Table 6.2-1.

So when using pydicom, what Python type should be used with a given VR to ensure that the value gets written correctly?

  • Elements of any VR:

    • Can be set as empty by using None

    • Can have their values set using their set using or stored as type from the table below

  • Non-SQ element values:

    • Can also be set using a list of their set using type - for Value Multiplicity (VM) > 1, the value will be stored as a MultiValue of their stored as type

    • However, according to the DICOM Standard, elements with VR LT, OB, OD, OF, OL, OW, ST, UN, UR and UT should never have a VM greater than 1.

  • SQ element values should be set using a list of zero or more Dataset instances.

VR

Name

Set using

Stored as (T)

Type hint for element value

AE

Application Entity

str

str

Union[None, T, MutableSequence[T]]

AS

Age String

str

str

AT

Attribute Tag

Tag 1

BaseTag

CS

Code String

str

str

DA

Date

str

str or DA2

DS

Decimal String

str, float or int

DSfloat or DSdecimal3

DT

Date Time

str

str or DT2

FL

Floating Point Single

float

float

FD

Floating Point Double

float

float

IS

Integer String

str or int

IS

LO

Long String

str

str

LT

Long Text

str

str

Optional[T]

OB

Other Byte

bytes

bytes

OD

Other Double

bytes

bytes

OF

Other Float

bytes

bytes

OL

Other Long

bytes

bytes

OV

Other 64-bit Very Long

bytes

bytes

OW

Other Word

bytes

bytes

PN

Person Name

str

PersonName

Union[None, T, MutableSequence[T]]

SH

Short String

str

str

SL

Signed Long

int

int

SQ

Sequence of Items

list

Sequence

MutableSequence[ Dataset]

SS

Signed Short

int

int

Union[None, T, MutableSequence[T]]

ST

Short Text

str

str

Optional[T]

SV

Signed 64-bit Very Long

int

int

Union[None, T, MutableSequence[T]]

TM

Time

str

str or TM2

UC

Unlimited Characters

str

str

UI

Unique Identifier (UID)

str

UID

UL

Unsigned Long

int

int

UN

Unknown

bytes

bytes

Optional[T]

UR

URI/URL

str

str

US

Unsigned Short

int

int

Union[None, T, MutableSequence[T]]

UT

Unlimited Text

str

str

Optional[T]

UV

Unsigned 64-bit Very Long

int

int

Union[None, T, MutableSequence[T]]

1 Any type accepted by Tag() can be used
2 If config.datetime_conversion = True (default False)
3 If config.use_DS_decimal = True (default False)