What are the differences between Python Dictionaries vs Javascript Objects?

JavascriptPythonObjectDictionary

Javascript Problem Overview


I'm new to python and I was reading about Dictionaries. And from my previous experience with langages like javascript they seemed like objects to me. Dictionaries can store lists and share many similaraties to objects in javascript.

ex python code:

menu = {}
menu['Chicken Alfredo'] = 14.50
menu['Italian Pasta'] = 15.89
menu['Shrimp Soup'] = 12.43
menu['Persian Rice'] = 21.99

ex javascript code:

var menu = new Object();
menu['Chicken Alfredo'] = 14.50;
menu['Italian Pasta'] = 15.89;
menu['Shrimp Soup'] = 12.43;
menu['Persian Rice'] = 21.99;

What's the difference here, they both do the same job, but there different concepts?

Javascript Solutions


Solution 1 - Javascript

From :

> In Python, dictionaries are a form of mapping type. They can be > initialized using a sequence of comma-separated name: value pairs, > enclosed in curly braces. They are accessed using array notation > involving square braces. The key can be any hashable, including > numbers and strings. > > In Javascript, a dictionary is the same as an object. It can be > initialized using the same syntax as Python. The key can be a number, > a string, or an identifier. Because the dictionary is also an object, > the elements can be accessed either using array notation, e.g. b[i], > or using property notation, e.g. b.i. > > Consider an identifier used in an initializer, such as > > b = {i:j} > In Python both i and j are evaluated, but in Javascript, only j is evaluated. In Javascript you also have the > privilege of writing in the dot notation, using the identifier i. > Hence in Python, > > i='k' > j=1 > b = {i:j} > b['k'] # -> 1 > > In Javascript, > > i='k' > j=1 > b = {i:j} > b['i'] // -> 1 > b.i // -> 1 > // b[i], b['k'] and b.k are not defined > In Javascript, using the identifier in dot notation is completely identical in all cases to > using a string that "looks like" the identifier in array notation. > Hence, > b = { 'i':1 } ; > b['i'] // -> 1 > b.i // -> 1 When a number or boolean is used in a dictionary, Javascript will access the element using a string representation of > the number or boolean. Not so in Python — a string and a number (or > boolean) are different hashables. >

If you are interested in differences between both languages, then look at ans

Solution 2 - Javascript

  1. Keys in Python dictionaries must be hashable (e.g. a string, a number, a float), while JavaScript does not have such a requirement.

  2. The following is a valid object in JavaScript:

const javascriptObject = { name: 'Alexander Pushkin', year: 1799 }

However, it would be invalid as a Python dictionary:

python_dictionary = {name: 'Alexander Pushkin', year: 1799}


# Results in a NameError: name 'name' is not defined

A quick fix would be to convert the Python dictionary's keys into strings:

my_dictionary = {'name': 'Alexander Pushkin', 'year': 1799}

Solution 3 - Javascript

Consider an identifier used in an initializer, such as

 b = {i:j} 

In Python both i and j are evaluated but in Javascript, only j is evaluated. In Javascript you can also write the dot notation, using the identifier i. Hence in Python,

 i='k'
 j=1
 b = {i:j}
 b['k'] # -> 1 

In Javascript,

 i='k'
 j=1
 b = {i:j}
 b['i'] // -> 1
 b.i // -> 1
 // b[i], b['k'] and b.k are not defined 

In Javascript, using the identifier in dot notation is completely identical in all cases to using a string that "looks like" the identifier in array notation. Hence, b = { 'i':1 } ; b['i'] // -> 1 b.i // -> 1 When a number or boolean is used in a dictionary, Javascript will access the element using a string representation of the number or boolean. Not so in Python — a string and a number (or boolean) are different hashables.

However,

//b[i] will be valid in this case of javascrip code
b = {}
var i = 'k';
b[i] = 2
console.log(b); // -> {'k':2}
//thus b[i] = b['k'] = 2

So, even though there are differences but all the applications of dictionary in python can be performed by the object in javascript and vice versa.

Solution 4 - Javascript

With given difference write in submitted answers one difference is missing. That is,Java Script objects are not iterable,but Python dictionaries are. If we looped over a python dictionary and java scripts object we get a TypeError in case of Java Script(code snippet is given below). for e.g. in case python dictionary,

dict={'Name':'Ram',
      'Occupation': 'Scientist',
      'salary': '50000'
         }

if we iterate over dict with for loop,we get following output.

for i  in  dict:
    print(i)


>>> Ram
    Occupation
    Salary

but in case of java script :

dict={Name:'Ram',
      Occupation: 'Scientist',
      salary: '50000'​}

for(i of dict){
  console.log(i)}
>>TypeError dict in not iterable.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRagnarView Question on Stackoverflow
Solution 1 - Javascripta.m.View Answer on Stackoverflow
Solution 2 - JavascripttechkuzView Answer on Stackoverflow
Solution 3 - JavascriptAdiTOSH 007View Answer on Stackoverflow
Solution 4 - JavascriptYogesh PatilView Answer on Stackoverflow