Hi, I'm Daniel Greenfeld, and welcome to my blog. I write about Python, Django, and much more.

Python dictionary vs JavaScript object: Dynamic Keys

Sunday, August 19, 2012 (permalink)

One of the things I noticed a long time ago with JavaScript is that when you create objects you can define keys outside of strings:

> var o = {city: "San Francisco"}
  Object

In JavaScript, this is valid. In Python, you'll get a NameError:

>>> o = {city: "San Francisco"}
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'city' is not defined

Normally this isn't too big of an issue, except when you want to use JavaScript to create object keys based off of values in a variable. Which means that while this code works fine in Python...

>>> region_name = 'state'
>>> o = {region_name: "Californa", "city": "San Francisco"}
>>> o["state"]
'Californa'

...it fails in JavaScript:

> var region_name = 'state'
  "state"
> var o = {region_name: "Californa", "city": "San Francisco"}
  Object
> o["state"]
  undefined
> o["region_name"]
  "Californa"

What this means is that if you want to define object keys dynamically in JavaScript, you need to add an extra line(s) of code:

> var region_name = "state""
  "state"
> var o = {"city": "San Francisco"}
  Object
> o[region_name] = "California" // Add dynamic key here
  "California"
> o["state"]
  "California"

Summary

  • Python is consistent in how it deals with named objects. If you haven't named something, Python throws the NameError.
  • JavaScript seems to send out an undefined unless you are defining an object.

Comments