2016-07-18 11 views
0

辞書の特定のキー/値をforループ内の別の関数に渡す方法を学びたいと思っています。 「ある」のキーはすべて同じ初期文字列を共有し、次のように末尾の整数によってインクリメントされます。辞書キーのサブセットを反復する

data = {} 
data["HMD1"] = [a,b,c] 
data["HMD2"] = [d,f,g] #and so on... 

同じ辞書witin、異なる名前を持つ他のキーがあります。今度はforループの中で、 "HMD"で始まる各キーの値を別の関数に渡したいと思います。ここで失敗したの最小限の作業例は次のとおりです。

これはevalは()変数が、データの重要ではない「HMD1」を評価しようとするため、貧しい人々の推測では、もちろん、それがエラーを返しました
data = {} 
data["HMD1"] = [0,2,3] 
data["HMD2"] = [5,6,4] 
data["not"] = 1237659398 
data["HMD3"] = [1,1,1] 

def dummyfun(vargin): 
    print(vargin) 
    return vargin 

for f in range(1,2,1): 
    out = dummyfun(data[eval(''.join(("HMD",str(f))))]) 

。誰でもこれを正しく行う方法を知っていますか?

答えて

1

evalはまったく必要ありません。あなただけが所望の結果を得るこれに

for f in range(1,4): #range don't include the end point 
    out = dummyfun(data["HMD{}".format(f)]) 

例えば.formatで文字列を構築する必要があります。しかし、それはそれは私がHMD1」に合格したいどのような願望キーが

#check first 
for f in range(1,4): 
    key = "HMD{}".format(f) 
    if key in data: 
     out = dummyfun(data[key]) 

#catch the exception 
for f in range(1,4): 
    try: 
     out = dummyfun(data["HMD{}".format(f)]) 
    except KeyError: 
     print("key",f,"is not in the data") 

#provide a default value 
for f in range(1,4): 
    out = dummyfun(data.get("HMD{}".format(f),None)) 
1

ただ、forループを使用して辞書を反復処理し、if文のキーの有効性を確認するために使用します。

そしてここでは、迅速な作業例です:更なる理解と

>>> data = {'HMD1': [1,2,3], 'HMD23':'heyo mayo', 'HMNOT2':'if this prints, I did something wrong'} 
>>> for key in data: 
...  if 'HMD' in key: 
...    print data[key] 
... 
[1, 2, 3] 
heyo mayo 

をまた、これを後方に見てキーストリングを作成し、そのキーが指している値を印刷することもできます。

#let's say you want to print HMD1, HMD2, HMD4, but not anything else 
keylist = [#list of keys that you want] 
for key in keylist: 
    if key in data: 
     print data[key] 

であり、やはり実施例である。

>>> data = {'HMD1': [1,2,3], 'HMD3':'heyo mayo, this shouldnt print', 'HMD4':123, 'HMD2':['g', 'h', 'i'], 'HMNOT2':'if this prints, I did something wrong'} 
>>> keylist = ['HMD1', 'HMD2', 'HMD4'] 
>>> for key in keylist: 
...  if key in data: 
...    print data[key] 
... 
[1, 2, 3] 
['g', 'h', 'i'] 
123 
+0

ない場合には、キーが辞書にない場合、あなたは、最初にそれをチェックし、例外をキャッチするか、デフォルト値を提供することができます失敗します。 "と" HMD2 "ではなく、" HMD "で始まる他のキーはありませんか?もちろん、私が知っていればそれはちょうどいくつかのキーになるでしょう。私はそれをコード化することができますが、私はforループでそれを行うことができる必要があります。 – willpower2727

+0

@ willpower2727の場合、条件式 'if'文を' if key == 'HMD1''(あるいはあなたが望むもの)に変更します。 'for key in data'は' data' dictのすべてのキーを繰り返し処理するので、if文で実際の解析が行われていることに注意してください。 –

関連する問題