Skip to content

Instantly share code, notes, and snippets.

@steveoh
Last active December 13, 2017 18:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steveoh/2f580c35be70ac6956bc714c895159c3 to your computer and use it in GitHub Desktop.
Save steveoh/2f580c35be70ac6956bc714c895159c3 to your computer and use it in GitHub Desktop.
replaces the code for value in a new _value field
def replace_codes_with_values(feature_class, field_info, domain_info):
field_domain_map = [(field, field.domain) for field in field_info if field.domain]
fields = [field[0] for field in field_domain_map]
field_names = [field.name for field in fields]
domain_names = [domain[1] for domain in field_domain_map]
domain_lookup = {}
for name in domain_names:
domain_lookup[name] = [domain for domain in domain_info if domain.name == name][0]
[arcpy.management.RemoveDomainFromField(feature_class, field.name) for field in fields]
[arcpy.management.AddField(feature_class, '{}_Value'.format(field.name), 'TEXT', field_alias=field.aliasName) for field in fields]
def swap_code_for_value(code, domain_name):
domain = domain_lookup[domain_name].codedValues
if not domain:
return code
if code not in domain:
return code
return domain[code]
combined_fields = field_names + ['{}_Value'.format(field) for field in field_names]
with arcpy.da.UpdateCursor(feature_class, combined_fields) as cursor:
for row in cursor:
values_row = [swap_code_for_value(code, domain_names[i]) for i, code in enumerate(row) if i < len(field_names)]
row = row[:len(field_names)] + values_row
cursor.updateRow(row)
arcpy.management.DeleteField(feature_class, field_names)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment