web-dev-qa-db-ja.com

Python辞書とJavascriptオブジェクトの違いは何ですか?

私はpythonが初めてで、辞書について読んでいました。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コード:

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

ここでの違いは何ですか、彼らは両方とも同じ仕事をしていますが、異なる概念がありますか?

39
Abdullahi Farah

From:

Pythonでは、辞書はマッピングタイプの形式です。それらは、中括弧で囲まれたコンマ区切りの名前と値のペアのシーケンスを使用して初期化できます。それらは、角括弧を含む配列表記を使用してアクセスされます。キーには、数字や文字列など、ハッシュ可能なものを使用できます。

Javascriptでは、辞書はオブジェクトと同じです。 Pythonと同じ構文を使用して初期化できます。キーは、数字、文字列、または識別子です。辞書はオブジェクトでもあるため、配列表記を使用して要素にアクセスできます。 b [i]、またはプロパティ表記を使用します。 b.i.

次のような初期化子で使用される識別子を考えます

 b = {i:j} 

Python iとjの両方が評価されますが、Javascriptではjのみが評価されます。Javascriptでは、識別子iを使用してドット表記で書き込む権限もあります。

 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 —文字列と数値(またはブール値)は異なるハッシュ可能です。

両方の言語の違いに興味がある場合は、 ans をご覧ください

45
a.m.
  • 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}
    
  • Dictを使用して、JavaScriptでオブジェクトを作成できます。データを保持するだけでなく、コンストラクターなどの他の多くの強力な機能も備えています。

7
techkuz