[Python-ideas] Remapping a table's keys

1 view
Skip to first unread message

Andrey Fedorov

unread,
Nov 4, 2010, 9:07:00 PM11/4/10
to Python-Ideas
Hi guys,

I often run into the problem when I need to systematically rename a bunch of keys in a table. For example, a JSON API returns an object where I need to map "Media Cost" to "adjusted_partner_cost", "Impressions" to "bid_count", etc. One way of doing this is:

key_map = {
    'Media Cost': 'adjusted_partner_cost',
    'Impressions': 'bids_won',
    'Day': 'date'
}

mykeys = {}
for k, v in dict_from_elsewhere.items():
  if k in key_map:
    ret[key_map[k]] = v
  else:
    ret[k] = dict_from_elsewhere[k]

I would love to be able to instead say something like:

mykeys = defaultdict(lambda x:x, {
    'Media Cost': 'adjusted_partner_cost',
    'Impressions': 'bids_won',
    'Day': 'date'
})

But default functions don't take parameters. Ideas?

- Andrey

Chris Rebert

unread,
Nov 4, 2010, 9:20:20 PM11/4/10
to Andrey Fedorov, Python-Ideas
On Thu, Nov 4, 2010 at 6:07 PM, Andrey Fedorov <anfe...@gmail.com> wrote:
> Hi guys,
> I often run into the problem when I need to systematically rename a bunch of
> keys in a table. For example, a JSON API returns an object where I need to
> map "Media Cost" to "adjusted_partner_cost", "Impressions" to "bid_count",
> etc. One way of doing this is:
>
> key_map = {
>     'Media Cost': 'adjusted_partner_cost',
>     'Impressions': 'bids_won',
>     'Day': 'date'
> }
> mykeys = {}
> for k, v in dict_from_elsewhere.items():
>   if k in key_map:
>     ret[key_map[k]] = v
>   else:
>     ret[k] = dict_from_elsewhere[k]

# Requires Python 2.7+ (dict comprehension)
ret = {key_map.get(k, k) : v for k,v in dict_from_elsewhere.items()}

Cheers,
Chris
--
http://blog.rebertia.com
_______________________________________________
Python-ideas mailing list
Python...@python.org
http://mail.python.org/mailman/listinfo/python-ideas

Ben Finney

unread,
Nov 4, 2010, 10:10:41 PM11/4/10
to python...@python.org
Chris Rebert <pyi...@rebertia.com> writes:

> # Requires Python 2.7+ (dict comprehension)
> ret = {key_map.get(k, k) : v for k,v in dict_from_elsewhere.items()}

If using a Python without dict comprehensions but with generator
expressions::

ret = dict(
(key_map.get(k, k), v)
for (k, v) in dict_from_elsewhere.items())

--
\ “Pinky, are you pondering what I'm pondering?” “Well, I think |
`\ so, Brain, but do I really need two tongues?” —_Pinky and The |
_o__) Brain_ |
Ben Finney

Reply all
Reply to author
Forward
0 new messages