From 822c93c692dab24c7c251d4ebd3ba10f1fa6757d Mon Sep 17 00:00:00 2001 From: Al Date: Thu, 5 May 2016 02:21:40 -0400 Subject: [PATCH] [aliases] packaging up field aliasing --- scripts/geodata/address_formatting/aliases.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 scripts/geodata/address_formatting/aliases.py diff --git a/scripts/geodata/address_formatting/aliases.py b/scripts/geodata/address_formatting/aliases.py new file mode 100644 index 00000000..9d352207 --- /dev/null +++ b/scripts/geodata/address_formatting/aliases.py @@ -0,0 +1,26 @@ +import six +from collections import defaultdict + + +class Aliases(object): + def __init__(self, aliases): + self.aliases = aliases + self.priorities = {k: i for i, k in enumerate(aliases)} + + def key_priority(self, key): + return self.priorities.get(key, len(self.priorities)) + + def replace(self, components): + replacements = defaultdict(list) + values = {} + for k in list(components): + new_key = self.aliases.get(k) + if new_key and new_key not in components: + value = components.pop(k) + values[k] = value + replacements[new_key].append(k) + + for key, source_keys in six.iteritems(replacements): + source_keys.sort(key=self.key_priority) + value = values[source_keys[0]] + components[key] = value