2014-01-08 12 views
27

私はPythonを初めて使い、辞書について読んでいました。そして、私の前のjavascriptのようなlangagesの経験から、彼らは私のもののように思えました。辞書は、リストを保存し、javascriptのオブジェクトに多くの類似点を共有することができます。Python Dictionaries vs Javascript Objects

元のPythonコード:

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

元の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; 

ここでの違いは何、彼らの両方が同じ仕事をするが、そこに異なる概念? Pythonで

+1

を見て?あなたはどんな違いを探していますか? – thefourtheye

+3

pythonコードもjs ... – dandavis

+3

Javascriptは 'menu [chicken]]'(IIRC)のエイリアスとして 'menu.chicken'のようなものを許可しますが、pythonでは許されません。また、要求された項目が存在しない場合、Python辞書は 'KeyError'を送出します。 Javascriptは 'undefined'(やはりIIRC)を返します... – mgilson

答えて

32

From :

、辞書マッピングタイプの一形態です。コンマで区切られた名前:値のペアのシーケンスを使用して を初期化し、中括弧で囲んだ にすることができます。角括弧を含む配列表記 を使用してアクセスします。キーは、 の数字と文字列を含む任意のハッシュ可能にすることができます。

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

iとjの両方Pythonでは、このような

b = {i:j} 

として初期化に使用される識別子を、検討が評価されているが、JavaScriptで、唯一jが評価されます。 Javascriptでは、識別子iを使用してドット表記で書き込む 特権もあります。ドット表記の識別子を使用して、そこでPythonで 、JavaScriptでは

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 

は、識別子に「のように見える」という文字列を使用して に、すべての場合において完全に同一であります配列記法。従って、 b = {'i':1}; 。 b ['i'] // - > 1 b.i // - > 1辞書に数字またはブール値が使用されている場合、Javascriptは数字またはブール値 の文字列表現を使用して要素にアクセスします。 Pythonではそうではありません。文字列と数字(または ブール値)は異なるハッシュテーブルです。

あなたは両方の言語間の違いに興味があるなら、あなたは右、2つの異なる言語を話していることを知っているans

+0

' - >'演算子はPythonでは存在しません(コードの2番目のブロック) – Jacquot

+0

@Jacquot彼は 'b ['k']'が '1 'の値になると言っているだけです – tisaconundrum

+0

@tisaconundrumええ、私がコメントして以来、' - > 1'はコメントアウトされています。当時私はちょうど厄介な人だったと思います – Jacquot