For loops returning wrong output - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: For loops returning wrong output (/thread-33537.html) |
For loops returning wrong output - Nighthound21 - May-03-2021 I got a project going and it seems to give me an error.Im looking for the output of a list what dict_subset returns. such as [{a:'Tim',b:'charlie','beta'},{a:'charlie',b :'Tim',c : beta}],and so on. this is the code. import string import random subset_list = [['charlie', 'Tim', 'beta'], ['Tim', 'charlie', 'beta'], ['beta', 'Tim', 'charlie'], ['Tim', 'beta', 'charlie'], ['charlie', 'beta', 'Tim'], ['beta', 'charlie', 'Tim']] dictionary_of_completed_values = [] dict_subset = {} for every in subset_list: i = 0 for each in every: dict_subset[string.ascii_letters[i]] = each i += 1 dictionary_of_completed_values.append(dict_subset) for each in dictionary_of_completed_values: print(each) RE: For loops returning wrong output - deanhystad - May-03-2021 You only create one dictionary, so dictionary_of_completed_values ends up with 6 copies of the same dictionary. You need to create a new dictionary for each subset. This code does so with a dictionary comprehension. import string sub_list = [ ['charlie', 'Tim', 'beta'], ['Tim', 'charlie', 'beta'], ['beta', 'Tim', 'charlie'], ['Tim', 'beta', 'charlie'], ['charlie', 'beta', 'Tim'], ['beta', 'charlie', 'Tim']] sub_dict = [] for sub in sub_list: sub_dict.append({key:val for key, val in zip(string.ascii_letters, sub)}) for sub in sub_dict: print(sub)If you don't comprehend comprehensions and don't take to zip, you should at least use enumerate. import string sub_lists = [ ['charlie', 'Tim', 'beta'], ['Tim', 'charlie', 'beta'], ['beta', 'Tim', 'charlie'], ['Tim', 'beta', 'charlie'], ['charlie', 'beta', 'Tim'], ['beta', 'charlie', 'Tim']] sub_dicts = [] for sub_list in sub_lists: sub_dict = {} for index, val in enumerate(sub_list): sub_dict[string.ascii_letters[index]] = val sub_dicts.append(sub_dict) for sub_dict in sub_dicts: print(sub_dict) |