2016-05-20 5 views
1

をリストを取得します。その後、私が持っているオブジェクトを私のようなそれにネストされ、他の辞書と辞書、している..私は、ネストされたループに苦しんだネストされた辞書に</p> <p>を

dd = {} 

dd[1] = {'layer1' : 'A', 'FieldA':[[1,2,3], [99,22,13]], 'col': '#ff310021'} 
dd[2] = {'layer2' : 'B', 'FieldB':[[4,5,6], [10,33,22]], 'col': '#ff310011'} 
dd[3] = {'layer3' : 'C', 'FieldC':[[11,2,33], [2,5,1]], 'col': '#ff312221'} 

を持っています入れ子になっている辞書の値と各ddキー(この例では3回)のためにが入力されます。

Plot(
x = [1,2,3], 
y = [4,5,6], 
col = '#ff312221' 
) 

オブジェクトが別のコンテキストで使用される別のクラスを作成する:

これは、オブジェクトに渡さ単一値を有する例です。

ただし、オブジェクトへの各呼び出しはリストに追加する必要があります。

私がしようとしているのは、オブジェクトを自動的に埋めるために辞書キーをループし、その結果をリストに追加することです。

l = [] 

l.append(Plot(
x = [1,2,3], 
y = [99,22,13], 
col = '#ff310021' 
)) 

誰かがいくつかのヒントがあります:

したがって、たとえばデータと、第一の目的は次のようになされるべきですか?

+0

ヒント: 'for key in dd:'はあなたのキーを繰り返し処理します。 'currentDict = dd [key]'のようなことをすると 'currentDict'はそのキーのdictを参照します。各dictには一定のフォームがあるので、キーを使用して再度値を取得することができます。 'currentDict ['col']'は、あなたが現在使っているディクテーションの '' col''の値を返します。 –

+1

あなたが問題を抱えている部分がわかりません。あなたは辞書のキーをループしたいと言ってきました。あなたはそのループを書く方法を知っていますか?もしそうなら、出来るだけ書くことができますか? –

+1

最初の行に 'x'がありますが、あなたの例では次の2行に' y'がありますか? –

答えて

2

このお試しください

dd = {} 

dd[1] = {'layer1' : 'A', 'FieldA':[[1,2,3], [99,22,13]], 'col': '#ff310021'} 
dd[2] = {'layer2' : 'B', 'FieldB':[[4,5,6], [10,33,22]], 'col': '#ff310011'} 
dd[3] = {'layer3' : 'C', 'FieldC':[[11,2,33], [2,5,1]], 'col': '#ff312221'} 

l = [] 

for key in dd: 
    x, y = dd[key].get('FieldA', None) or dd[key].get('FieldB', None) or dd[key].get('FieldC', None) 
    col = dd[key]['col'] 

    l.append(Plot(x=x, y=y, col=col)) 
+1

私は好きですあなたがロジックを使用する方法または。 – LAL

+1

その作品!ありがとう! – matteo

1

、これを試してください:あなたはそれがキーと値です買ってあげるのdictあなたはdd.items()にITERしようとした場合

for i in dd: 
    if 'FieldA' in dd[i]: 
     x = dd[i]['x'][0] 
     y = dd[i]['x'][1] 
    if 'FieldB' in dd[i]: 
     x = dd[i]['y'][0] 
     y = dd[i]['y'][1] 
    if 'FieldC' in dd[i]: 
     x = dd[i]['z'][0] 
     y = dd[i]['z'][1] 
    col = dd[i]['col'] 
    print x, y, col 
    l.append(Plot(x,y,col)) 
1

を:

>>> for key, value in dd.items(): 
...  print(key, value) 
1 {'col': '#ff310021', 'layer1': 'A', 'x': [[1, 2, 3], [99, 22, 13]]} 
2 {'layer2': 'B', 'col': '#ff310011', 'y': [[4, 5, 6], [10, 33, 22]]} 
3 {'col': '#ff312221', 'y': [[11, 2, 33], [2, 5, 1]], 'layer3': 'B'} 

ので、各項目について、'x'または'y'のキー:

l = [] 
for key, value in dd.items(): 
    try: 
     cords = value['x'] 
    except KeyError: 
     cords = value['y'] 
    l.append(
     Plot(x=cords[0], y=cords[1], col=value['col']) 
    ) 

また、代わりにlに追加の発電機を作成することがあります。

def build_plots(plot_dict): 
    for key, value in plot_dict.items(): 
     try: 
      cords = value['x'] 
     except KeyError: 
      cords = value['y'] 
     yield Plot(x=cords[0], y=cords[1], col=value['col']) 

そして、これを行うことによって、それを消費:

for plot in build_plots(dd): 
    print(plot) 

私はそれが役に立てば幸い!

+1

あなたは答えを編集したいかもしれません – LAL

+0

私はなぜ、あなたに感謝しました! –

関連する問題