¿Cuáles son las diferencias entre los diccionarios de Python y los objetos de Javascript?

4 minutos de lectura

Avatar de usuario de Ragnar
Ragnar

Soy nuevo en Python y estaba leyendo sobre Diccionarios. Y por mi experiencia previa con lenguajes como Javascript, me parecían objetos. Los diccionarios pueden almacenar listas y compartir muchas similitudes con los objetos en Javascript.

ex código python:

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

ex código javascript:

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

¿Cuál es la diferencia aquí, ambos hacen el mismo trabajo, pero hay diferentes conceptos?

  • el código python también es js…

    – dandavis

    8 de enero de 2014 a las 5:12

  • Javascript permite cosas como menu.chicken como un alias para menu['chicken'] (IIRC), pero Python no lo permite. Además, un diccionario de python generará un KeyError si un elemento solicitado no está presente. Javascript volverá undefined (de nuevo, IIRC)…

    – mgilson

    8 de enero de 2014 a las 5:14


  • @dandavis sintácticamente son lo mismo, pero un diccionario puede comportarse de manera diferente a un objeto JS

    – Arquero esterlina

    8 de enero de 2014 a las 5:14

  • En python dict, puede usar cualquier tipo inmutable como clave (cadena, int, tupla, conjunto congelado, etc.), pero en los objetos js, todas las claves se convierten en cadenas. Entonces, menu['1'] y menu[1] son lo mismo en js, pero no en los dictados de Python.

    –Ashwini Chaudhary

    8 de enero de 2014 a las 5:24


  • Por cierto, hay un paquete de python que proporciona acceso de estilo de atributo para diccionarios. Permite cosas como menu.chicken, menu.chicken = 1etc. github.com/Infinidat/munch

    – Rotareti

    13 de junio de 2017 a las 14:29


avatar de usuario de am
soy

De :

En Python, los diccionarios son una forma de tipo de mapeo. Se pueden inicializar mediante una secuencia de nombres separados por comas: pares de valores, encerrados entre llaves. Se accede a ellos usando notación de matriz que involucra llaves cuadradas. La clave puede ser cualquier hashable, incluidos números y cadenas.

En Javascript, un diccionario es lo mismo que un objeto. Se puede inicializar usando la misma sintaxis que Python. La clave puede ser un número, una cadena o un identificador. Debido a que el diccionario también es un objeto, se puede acceder a los elementos utilizando la notación de matriz, por ejemplo, b[i]o usando notación de propiedad, egbi

Considere un identificador utilizado en un inicializador, como

 b = {i:j} 

En Python, se evalúan tanto i como j, pero en Javascript, solo se evalúa j. En Javascript también tienes el privilegio de escribir en notación de puntos, usando el identificador i. Por lo tanto, en Python,

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

En Javascript,

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

En Javascript, usar el identificador en notación de puntos es completamente idéntico en todos los casos a usar una cadena que “se parece” al identificador en notación de matriz. Por lo tanto, b = { ‘i’:1 } ; b[‘i’] // -> 1 bi // -> 1 Cuando se usa un número o booleano en un diccionario, Javascript accederá al elemento usando una representación de cadena del número o booleano. No es así en Python: una cadena y un número (o booleano) son hashables diferentes.

Si está interesado en las diferencias entre ambos idiomas, mire ans

  • El -> el operador no existe en Python (segundo bloque de código)

    – Jacquot

    25 de junio de 2017 a las 10:27

  • @Jacquot solo está diciendo eso b['k'] seria un valor de 1

    – tisaconundrum

    06/03/2018 a las 20:22


  • @tisaconundrum sí, lo sé, el -> 1 ha sido comentado desde que comenté; Supongo que en ese momento solo era exigente, para aquellos que son rápidos para copiar y pegar el código para ver qué genera

    – Jacquot

    7 de marzo de 2018 a las 9:31

avatar de usuario de techkuz
techkuz

  1. Las claves en los diccionarios de Python deben ser hashable (por ejemplo, una cadena, un número, un flotante), mientras que JavaScript no tiene ese requisito.

  2. El siguiente es un objeto válido en JavaScript:

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

Sin embargo, no sería válido como diccionario de Python:

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


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

Una solución rápida sería convertir las claves del diccionario de Python en cadenas:

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

Avatar de usuario de Yogesh Patil
Yogesh Patil

Con la diferencia dada, escriba las respuestas enviadas, falta una diferencia. Es decir, los objetos de Java Script no son iterables, pero los diccionarios de Python sí lo son. Si recorrimos un diccionario de python y un objeto de scripts de Java, obtenemos un TypeError en el caso de Java Script (el fragmento de código se proporciona a continuación). por ejemplo, en caso de que el diccionario de python,

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

si iteramos sobre dict con for loop, obtenemos el siguiente resultado.

for i  in  dict:
    print(i)


>>> Ram
    Occupation
    Salary

pero en el caso de java script:

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

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

  • Al menos a partir de 2022 y probando en Chrome, esto no es exacto. Si lo cambias a i in dict (tienes un error tipográfico), itera muy bien

    – HFBrowning

    19 de agosto de 2022 a las 23:18

¿Ha sido útil esta solución?