2013-03-17 2 views
17

すべての学期を追加するI dict.updateを使用して少なくとも一つのPython学生()は、単一のキー/値のペア、すなわち:のpython dict.update対添字は、単一のキー/値のペア

mydict.update({'newkey':'newvalue'}) 
を追加する必要があります代わりに

mydict['newkey'] = 'newvalue' 

私はこの方法を教示していないと、彼らはこの例を見つけている場所、私は知りませんが、それはあまり効率的ですので、私はそれをしないことを伝え(おそらく作成新しい2要素のディクテーション)、それが非標準であるためです。

正直なところ、この構文ではなく、表示可能なメソッドを使用したいということを理解できます。おそらく、他のメソッド呼び出しと一貫性があります。しかし、私は初心者のように思えます。

この時点で提供する知恵はありますか?

+3

あなたの質問は何ですか?このように 'update'を使うのが良いか悪いのか尋ねていますか? – BrenBarn

+0

私はSOがプログラミング*の質問をする場所だと思っています - 実際には*プログラミングプログラミング*について質問する場所ではありません。したがって、これは非常に迅速に閉鎖される可能性が高いです。あなたの検索で幸運。 – mgilson

+1

yep - 理由とその理由。教える質問ではありません。この方法が非効率的であるかどうか、また教えてもらえないかどうかといった問題はちょっとした背景に過ぎません。コメントありがとう –

答えて

19

ベンチマークは、そのパフォーマンスへの影響のあなたの疑惑が正しいように見える示しています

ある
$ python -m timeit -s 'd = {"key": "value"}' 'd["key"] = "value"' 
10000000 loops, best of 3: 0.0741 usec per loop 
$ python -m timeit -s 'd = {"key": "value"}' 'd.update(key="value")' 
1000000 loops, best of 3: 0.294 usec per loop 
$ python -m timeit -s 'd = {"key": "value"}' 'd.update({"key": "value"})' 
1000000 loops, best of 3: 0.461 usec per loop 

が、それは私のマシンで約6倍遅くなります。しかし、Pythonは、あなたが最高のパフォーマンスが必要な場合に使用する言語ではありませんので、この状況で最も読みやすいものを使用することをお勧めします。 ;またはそのような何か

configuration.update(
    timeout=60, 
    host='example.com', 
) 

&hellip:updateはこのような状況で、より読みやすいかもしれないのに多くのもののために、それは、[]方法だろう。

+0

インデックス付きアップデートを実行するのにかかる時間は、意味のあるアプリケーションでは無関係です。 [] = sの読みやすさははるかに重要です。私は更新版がはるかに明らかではないことを知っている。 –

+0

@PeterWooster:私は可読性がより重要であることに同意しますが、私は個人的には「更新」が読みやすくなっています。 – icktoofay

+0

しかし、おそらくFortranを書いたことはありません:) –

2

キーが直接早く三度での更新が、YMMV:

$ python -m timeit 'd={"k":1}; d.update({"k":2})' 
1000000 loops, best of 3: 0.669 usec per loop 

$ python -m timeit 'd={"k":1}; d["k"] = 2' 
1000000 loops, best of 3: 0.212 usec per loop 
+0

うまくそれを縫う、ありがとう!私はtimeitの使用を開始する必要があります –

0

[] =オブジェクト指向言語における有効な構文要素、またはそのことについては、他のではないことを感じる人がいます。私は数十年前にAPLの言語開発に携わった時、この議論を聞いたことを覚えています。その構文はFortranからのホールドオーバーです。

私は個人的にそのビューを購読していません。インデックス付きの割り当てにはかなり満足しています。しかし、実際のメソッド呼び出しが優れていると主張する人がいます。もちろん、複数のソリューションを持つことは常に良いことです。

編集: 実際の問題は、パフォーマンスではなく読みやすさです。インデックス化された割り当ては、理論的にはあまり適切でない場合でも、読み易いと多くの人が認識しています。

関連する問題