2016-06-11 13 views
0

Pythonで辞書を効率的に処理するための理解を得る。キー(Python)に基づいて辞書内のいくつかの値を計算する

私は辞書

dict = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5} 

を持っていると私はだけその値のサブセットに計算を実行したいと思います。計算で考慮される値は、に基づいてです。言う、これらのキーは、キーのリストになります。例えば

、Iキーabe値を追加したい場合(即ちkeys_list_to_add = [ 'A'、 'B'、 'E'])私は結果20であることが期待されます。そのようなサブセットの計算がいくつか存在し、キーが欠落している可能性があることに注意してください(その場合、例外が発生する可能性があります)。

このanswerを見て、私はそれを実装しようとしましたが、私はまだPythonを学んでいません。私の問題のコード提案をお願いします。キーに基づいてdict値を返します

+0

されていますキーの「サブセット」は実際にサブセットであることが保証されていますか? 「サブセット」のキーが実際にあなたの辞書にない場合、答えが例外を起こすことは許されますか? –

+0

@RoryDaultonキーが見つからない場合は例外が発生するはずです。 (変更された質問) –

答えて

3

あなたがsumgenerator expressionで与えられた例を実装することができます

>>> d = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5} 
>>> keys_list_to_add = ['a', 'b', 'e'] 
>>> sum(d[k] for k in keys_list_to_add) 
20 

それは、与えられたキーがdictに存在しない場合にKeyErrorを提起:

>>> keys_list_to_add = ['a', 'b', 'f'] 
>>> sum(d[k] for k in keys_list_to_add) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in <genexpr> 
KeyError: 'f' 

何らかの方法でエラーを処理したい場合は、try/except

>>> try: 
...  sum(d[k] for k in keys_list_to_add) 
... except KeyError: 
...  print 'Missing key' 
... 
Missing key 

それとも0として不足しているキーを解釈することができます:それはメソッドを隠すので、あなたは変数のためのdictのようなビルドでメソッド名を使用してはならない

>>> sum(d.get(k, 0) for k in keys_list_to_add) 
15 

注:

>>> dict(a=1) 
{'a': 1} 
>>> dict = {1:2} 
>>> dict(a=1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'dict' object is not callable 
+0

それは私が欲しいものです、ありがとう。あなたは 'keyerror'をどう扱うかを詳しく教えてください。 'try..except'や' for_key_list_to_add'の 'for'ループをどのように実装すればよいか分かりません。 –

+0

@ nk-fford欠落しているキーを処理する方法についていくつかのオプションを追加しましたが、コンテキストがわからないので「正しい」方法が何であるかを知ることは不可能です。 – niemmi

関連する問題