Why does this for loop loop twice?

Question:

This is what I’m trying to accomplish:

list_dic_gen(['One','Two'], [['First','Second']])

is

[{'One': 'First', 'Two': 'Second'}]

As a second example of this, the function call:

list_dic_gen(['Second'], [['One'],['Third Fourth']])

would be expected to return:

[{'Second': 'One'}, {'Second': 'Third Fourth'}]

But my code

def list_dic_gen(lst,lol):
 acc=[]
 a=0
 for x in lol:
   accd={}
   for b in x:
     accd[lst[a]]=b
     acc.append(accd)
     if len(lst)>1:
       a+=1
 return acc

This code works for the second example, but for the first example, the for loop makes 2 dictionaries even though there is 1 list in the list

[{'One': 'First', 'Two': 'Second'}, {'One': 'First', 'Two': 'Second'}]
Asked By: Manuel

||

Answers:

Because there are 2 b‘s in x and you are appending for both. Append acc after the inner loop.

def list_dic_gen(lst,lol):
    acc=[]
    a=0
    for x in lol:
        accd={}
        for b in x:
          accd[lst[a]]=b
          a += len(lst)>1 #you don't need a condition
        acc.append(accd)  #append the list after the loop
    return acc

print(list_dic_gen(['One','Two'], [['First','Second']]))

I believe my complete refactor of your function does the same thing that yours does. I don’t have enough test cases to be positive.

def list_dic_gen(keys:list, data:list) -> list[dict]:
    return [{keys.pop(0):value for value in values} for values in data]
Answered By: OneMadGypsy
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.