Python Forum

Full Version: For loops returning wrong output
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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)
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)