2017-10-27 6 views
2

私はこのコードに少しぶち当たっています(私のタイトルが誤解を招く場合は私を許してください)。 my_inputs内の内容がすべて正しいと見つける可能なmy_dictであれば、それは私が望んでいた方法で実行されている、と仮定すると、理想的なシナリオではリスト内のすべての項目がチェックされている場合にのみ、次の関数を実行してください。

my_dict = {'aaa' : 12, 'bbb' :34, 'ccc' : 56} 
my_inputs = ['aaa', 'bbb'] 

def check(user_input): 
    input_check = my_dict.get(user_input) 
    if not input_check: 
     raise ValueError('{0} is not part of the dictionary'.format(user_input)) 
     #sys.exit() 
    #return 
    return input_check 

for i in my_inputs: 
    check(i) 
    print 'Executing next...' 

: 次のコードを参照してください。

ただし、内容をmy_inputs = ['aaa1', 'bbb']に変更した場合、この順序で進むと、forループ内の文を印刷できなくなります。 しかし、それをmy_inputs = ['aaa', 'bbb1']に変更すると、まずステートメントが出力され、次にValueErrorが発生します。これは正しいですが、aaaが辞書に存在するためです。

ここで私の質問は - check関数をすべての入力を一度にチェックして、次の関数を実行する前に辞書内に存在するかどうかを確認しようとしています。 my_inputsの順番が['aaa1', 'bbb']でも['aaa', 'bbb1']でも、単にValueErrorで停止してステートメントを出力しません。この文は、my_inputのすべての項目がmy_dictで占められている場合にのみ表示されます。

sys.exit()returnを使ってみましたが、うまくいかないようです。表示するには

答えて

0

は辞書に存在してもmy_inputsに存在する要素のいずれかの変異体である、あなたはこれを試すことができます。

my_inputs = ['aaa1', 'bbb'] 
my_dict = {'aaa' : 12, 'bbb' :34, 'ccc' : 56} 
final_vals = [i for i in my_inputs if any(i.startswith(c) or c.startswith(i) for c in my_dict)] 

出力:

['aaa1', 'bbb'] 
+0

あなたはおそらく、私はかなりそれを取得しておりません、もう少しコードを説明してもらえ... – dissidia

1

あなたはロジックを抽出することができます小切手の外で例外を出す

my_dict = {'aaa' : 12, 'bbb' :34, 'ccc' : 56} 
my_inputs = ['aaa', 'bbb'] 

def check(user_input): 
    input_check = my_dict.get(user_input) 
    return input_check is not None 

failed_result = [key for key in my_inputs if not check(key)] 
if not failed_result: 
    print("It's OK!") 
else: 
    print("The following key(s) is(are) not in dict!", failed_result) 

それとも単純にチェックします、[key for key in my_inputs if key is not in my_dict]

関連する問題