Python Dictionaries与Javascript对象有什么区别?

时间:2014-01-08 05:11:10

标签: javascript python object dictionary

我是python的新手,我正在阅读有关词典的内容。从我以前使用像javascript这样的语言的经验来看,它们对我来说似乎是对象。字典可以存储列表并在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;

这里有什么不同,他们都做同样的工作,但有不同的概念?

3 个答案:

答案 0 :(得分:42)

From :

  

在Python中,词典是一种映射类型。他们可以   使用逗号分隔的名称:值对序列进行初始化,   用花括号括起来。使用数组表示法访问它们   涉及方括号。钥匙可以是任何可清洗的,包括   数字和字符串。

     

在Javascript中,字典与对象相同。有可能   使用与Python相同的语法初始化。钥匙可以是数字,   字符串或标识符。因为字典也是一个对象,   可以使用数组表示法访问元素,例如,双],   或使用财产符号,例如b.i。

     

考虑初始化程序中使用的标识符,例如

 b = {i:j} 
     

在Python中,i和j都被评估,但在Javascript中,只评估j。在Javascript中你也有   使用标识符i以点表示法写入的权限。   因此在Python中,

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

在Javascript中,

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

在Javascript中,使用点表示法中的标识符在所有情况下完全相同   使用“看起来像”数组表示法中的标识符的字符串。   因此,       b = {'i':1};       b ['i'] // - > 1       b.i // - > 1当在字典中使用数字或布尔值时,Javascript将使用字符串表示形式访问元素   数字或布尔值。在Python中不是这样 - 一个字符串和一个数字(或   boolean)是不同的哈希。

如果您对两种语言之间的差异感兴趣,请查看ans

答案 1 :(得分:5)

  • Python词典中的键必须是可哈希的(例如,字符串,数字,浮点数等)。

  • 以下是JavaScript中的有效对象:

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

    但是,它将作为Python字典无效:

    python_dictionary = {name: 'Alexander Pushkin', year: 1799}
    
    # Traceback (most recent call last):
    # NameError: name 'name' is not defined
    

    一种快速的解决方法是将Python词典的键转换为字符串:

    my_dictionary = {'name': 'Alexander Pushkin', 'year': 1799}
    
  • 通过命令可以使用JavaScript制作对象。它们不仅保存数据,还具有许多其他强大的功能,例如构造函数。

答案 2 :(得分:1)

考虑初始化程序中使用的标识符,例如

 b = {i:j} 

在Python中,i和j均被评估,而在Javascript中,仅j被评估。在Javascript中,您还可以使用标识符i来写点符号。因此,在Python中,

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

在Java语言中,

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

在Javascript中,在所有情况下都使用点表示法标识符与使用“看起来像”数组表示法标识符的字符串完全相同。因此,b = {'i':1}; b ['i'] //-> 1 b.i //-> 1在字典中使用数字或布尔值时,Javascript将使用数字或布尔值的字符串表示形式访问元素。在Python中不是这样-字符串和数字(​​或布尔值)是不同的哈希值。

但是,

//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

因此,即使存在差异,但python中dictionary的所有应用程序都可以由javascript中的对象执行,反之亦然。