2017-06-27 16 views
0

こんにちは、以下のロジックを開発してください。辞書リストと異なる長さのリストにマージする

list_1 = [1,2,3] 
list_2 = [a,b,c,d,e,f,g,h,i] 

必要な出力(辞書のリスト):

output = [{1:a,2:b,3:c}, {1:d,2:e,3:f}, {1:g,2:h,3:i}] 

マイスクリプト:

return_list = [] 
k = 0 
temp_dict = {} 

for i, value in enumerate(list_2): 
    if k <= len(list_1)-1: 
     temp_dict[list_1[k]] = value 
     if k == len(list_1)-1: 
      k = 0 
      print temp_dict 
      return_list.append(temp_dict) 
      print return_list 
      print '\n' 
     else: 
      k = k + 1 
print return_list 

マイ出力:あなたが見ることができるように、temp_dictは

{1: 'a', 2: 'b', 3: 'c'} 
[{1: 'a', 2: 'b', 3: 'c'}] 


{1: 'd', 2: 'e', 3: 'f'} 
[{1: 'd', 2: 'e', 3: 'f'}, {1: 'd', 2: 'e', 3: 'f'}] 


{1: 'g', 2: 'h', 3: 'i'} 
[{1: 'g', 2: 'h', 3: 'i'}, {1: 'g', 2: 'h', 3: 'i'}, {1: 'g', 2: 'h', 3: 'i'}] 


[{1: 'g', 2: 'h', 3: 'i'}, {1: 'g', 2: 'h', 3: 'i'}, {1: 'g', 2: 'h', 3: 'i'}] 

を得ています正しく印刷されましたが、return_list最後のtemp_dictは3回です。 解決してください。

答えて

0

ここでの問題は、新しいオブジェクトにtemp_dictを再販していないことです。 これをリストに追加すると、dictオブジェクトへの参照が引き続き保持されます。次のループで変更した後は、同じ参照であるため配列の値が変更されます。

あなたが値をリセットする場合は、これは動作するはず

list_1 = [1,2,3] 
list_2 = ['a','b','c','d','e','f','g','h','i'] 

return_list = [] 
k = 0 
temp_dict = {} 

for i, value in enumerate(list_2): 
    if k <= len(list_1)-1: 
     temp_dict[list_1[k]] = value 
     if k == len(list_1)-1: 
      k = 0 
      print temp_dict 
      return_list.append(temp_dict) 
      temp_dict = {} # Here is the change 
      print return_list 
      print '\n' 
     else: 
      k = k + 1 
print return_list 
+0

どうもありがとう:) –

0

を動作するはずです:

list_1 = [1,2,3] 
list_2 = ['a','b','c','d','e','f','g','h','i'] 

output = [] 

j = 0 
for i in range(1, len(list_1) + 1): 
    output.append(dict(zip(list_1, list_2[j:i * 3]))) 
    j = i * 3 

print(output) 

仮定はあなた第二のリストは、最初のリストより正確に3倍大きいということです。

0
def merge_them(list1, list2): 
    output = [] 
    i = 0 
    while i < len(list_2): 
     output.append(dict(zip(list_1, list_2[i: i + len(list1)]))) 
     i += len(list1) 

    return output 

、あなたはそれをテストすることができます。

TEST1:

list_1 = [1,2,3] 
list_2 = ['a','b','c','d','e','f','g','h','i'] 
print merge_them(list_1, list_2) 

あなたが取得します:

[{1: 'a', 2: 'b', 3: 'c'}, {1: 'd', 2: 'e', 3: 'f'}, {1: 'g', 2: 'h', 3: 'i'}] 

TEST2:

list_1 = [1,2,3,] 
list_2 = ['a','b','c','d','e'] 
print merge_them(list_1, list_2) 

you will get: 

[{1: 'a', 2: 'b', 3: 'c'}, {1: 'd', 2: 'e'}] 

TEST3:

list_1 = [1,2,3,4,5,6,7,8] 
list_2 = ['a','b','c','d','e'] 
print merge_them(list_1, list_2) 

you will get: 

[{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}] 
関連する問題