Hi everyone,
I am looking to return the subtype domains associated with a subtype field. I was able to explore arcpy.da.ListSubtypes however this function seems to return a dictionary and I seem to be getting lost thereafter. Is there a quick way to isolate only the subtype domains from the dictionary?
Thanks!
Solved! Go to Solution.
There is a good sample on the resource center that will list all the fields, their default value, and any domain assigned.
import arcpy
fc = <FeatureClass>
subtypes = arcpy.da.ListSubtypes(fc)
for stcode, stdict in subtypes.iteritems():
print('Code: {0}'.format(stcode))
for stkey in stdict.iterkeys():
if stkey == 'FieldValues':
print('Fields:')
fields = stdict[stkey]
for field, fieldvals in fields.iteritems():
print(' --Field name: {0}'.format(field))
print(' --Field default value: {0}'.format(fieldvals[0]))
if not fieldvals[1] is None:
print(' --Domain name: {0}'.format(fieldvals[1].name))
else:
print('{0}: {1}'.format(stkey, stdict[stkey]))However, if you are only interested in a list of all the domains used within the subtype, we can just list the domains using a similar code:
import arcpy
fc = <FeatureClass>
subtypes = arcpy.da.ListSubtypes(fc)
for stcode, stdict in subtypes.iteritems():
print('Code: {0}'.format(stcode))
for stkey in stdict.iterkeys():
if stkey == 'FieldValues':
print('Fields with Domains:')
fields = stdict[stkey]
for field, fieldvals in fields.iteritems():
if not fieldvals[1] is None:
print(' --Field name: {0}'.format(field))
print(' --Domain name: {0}\n'.format(fieldvals[1].name))
else:
print('{0}: {1}'.format(stkey, stdict[stkey]))Output:
Code: 1 Default: True Name: Metal Pipe SubtypeField: SubTypeCD Fields: --Field name: InletWallThickness --Domain name: fcNumericWallThickness --Field name: Material --Domain name: fcMetalMaterial --Field name: PipeDistributor --Domain name: fcPipeDistributor
There is a good sample on the resource center that will list all the fields, their default value, and any domain assigned.
import arcpy
fc = <FeatureClass>
subtypes = arcpy.da.ListSubtypes(fc)
for stcode, stdict in subtypes.iteritems():
print('Code: {0}'.format(stcode))
for stkey in stdict.iterkeys():
if stkey == 'FieldValues':
print('Fields:')
fields = stdict[stkey]
for field, fieldvals in fields.iteritems():
print(' --Field name: {0}'.format(field))
print(' --Field default value: {0}'.format(fieldvals[0]))
if not fieldvals[1] is None:
print(' --Domain name: {0}'.format(fieldvals[1].name))
else:
print('{0}: {1}'.format(stkey, stdict[stkey]))However, if you are only interested in a list of all the domains used within the subtype, we can just list the domains using a similar code:
import arcpy
fc = <FeatureClass>
subtypes = arcpy.da.ListSubtypes(fc)
for stcode, stdict in subtypes.iteritems():
print('Code: {0}'.format(stcode))
for stkey in stdict.iterkeys():
if stkey == 'FieldValues':
print('Fields with Domains:')
fields = stdict[stkey]
for field, fieldvals in fields.iteritems():
if not fieldvals[1] is None:
print(' --Field name: {0}'.format(field))
print(' --Domain name: {0}\n'.format(fieldvals[1].name))
else:
print('{0}: {1}'.format(stkey, stdict[stkey]))Output:
Code: 1 Default: True Name: Metal Pipe SubtypeField: SubTypeCD Fields: --Field name: InletWallThickness --Domain name: fcNumericWallThickness --Field name: Material --Domain name: fcMetalMaterial --Field name: PipeDistributor --Domain name: fcPipeDistributor
thank you!
Hi, hoping that you are in good health. I need your support to review below code. Using ESRI ArcGIS Desktop version 10.4.1, a file Geodatabase having line feature class "Trench" with two tables "T_DUCT" and "T_SUB_DUCT".
Requirement: It is required to create sub type records of "T_DUCT" inside T_SUB_DUCT (as ROWS). Is there anything need to update in below code?
I have attached the code file.
Regards.
Khalid Mahmood
Riyadh, Saudi Arabia
The logic of this code is still sound, users will just need to replace instances of .iteritems(), iterkeys(), with .items() and .keys() for ArcPro/Python3 processing.