2017-05-04 9 views
1

の要素を使用して、辞書のキーを変更する私は、Pythonの比較的新しいだと私は自分のコードに問題があります。my_dictionaryキーでPythonの:どのようにリスト

days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 


A = list(range(2)) 
B = list(range(2)) 

another_dict= {(a, b) : [[0, 1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [2, 3, 4, 5, 6, 7, 8]] for a in A for b in B} 

my_dict = dict() 
for a in A: 
    for b in B: 
     for c in range(len(another_dict[a, b])): 
      for day in range(len(another_dict[a, b][0])): 
       my_dict[(a, b, c, day)] = another_dict.get((a, b))[range(len(another_dict[a, b])).index(c)][range(len(another_dict[a, b][0])).index(day)] 

dayは0から6までの値を取ることができるし、私は

キー(A、Bを変更することが可能です(例えば、私が代わりに(a, b, c, 0)(a, b, c, Monday)を持ちたい)リストdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

のそれぞれの要素にこの値を代入したいです、c、day)をd日の新しい鍵(a、b、c、d)に変換しますか?

ありがとうございます!

答えて

1

あなたは同じ上記のコードを維持したい場合は、新しいキーを使用して新しい辞書を作成することができます。

new_dict = {} 
for d in my_dict: 
    new_dict[(d[0],d[1],d[2],days[d[3]])] = my_dict[d] 

そうでない場合は、行を変更:に

my_dict[(a, b, c, day)] = ... 

を:

my_dict[(a, b, c, days[day])] = ... 

出力:

{(0, 1, 1, 'Friday'): 5, (0, 1, 2, 'Thursday'): 5, (0, 0, 1, 'Saturday'): 6, (1, 0, 1, 'Saturday') ... 
+0

ありがとうございました!優れた答え! – killua

1

enumerate機能を使用することもできます。

for day in range(len(another_dict[a, b][0])): 
    my_dict[(a, b, c, days[day])] = ... 

へ:

for day, d in enumerate(days): 
    my_dict1[(a, b, c, d)] = 

リストdaysので、私はこのラインを少し単純化の自由を撮影したanother_dict[a, b][0]と同じ大きさで、この行を変更します。しかし、私はまだニックの答えがよりエレガントで簡単であることがわかります。

+0

ありがとう、素晴らしい答え!私はすべての解決策が私が言語をもっと理解するのを助けるように、Pythonを学ぼうとしています! – killua