Python Forum
Looping to Create Nested Dictionary
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Looping to Create Nested Dictionary
#4
Squenson:
I vaguely understand! How could I copy and save the values of innerdict to make them independent of the dictionary?

Wavic:
I implemented the line you gave me and it worked for a second, but now it pulls up a ValueError. Here's the updated code:
def reader(filename):
    file_reader = open(filename)
    results = []
    innerdict = {}
    outerdict = {}

    for line in file_reader:
        parts = line.split(" ")
        parts = line.replace("\n", "")
        line_tuple = (int(parts[0]), parts[1], int(parts[2]), int(parts[3]), float(parts[4]))
        key = line_tuple[1]

     #   innerdict["number"] = line_tuple[0]
      #  innerdict["grade"] = line_tuple[2]
       # innerdict["total"] = line_tuple[3]
        #innerdict["weight"] = line_tuple[4]
        outerdict[parts[1]] = dict(zip(['number','grade','total','weight'], parts[1:]))
        
         
        #outerdict[key] = innerdict
    return outerdict
    
    file_reader.close()
And here's the error:
Error:
Traceback (most recent call last): File "Reader.py", line 81, in <module> print(reader("sample.cs1301")) File "Reader.py", line 57, in reader line_tuple = (int(parts[0]), parts[1], int(parts[2]), int(parts[3]), float(parts[4])) ValueError: invalid literal for int() with base 10: 'a' Command exited with non-zero status 1

(Dec-15-2017, 11:04 PM)wavic Wrote: Hm! Is it allowed dictionary comprehension?
Open the file and read it with the  readlines  method. This will create a list of the lines.
Create an empty dict  for the final result.
Iterate over the lines and for each line:
    split the line
    the_dict[splited_line[0]] = dict(zip(['number','grade','total','weight'], splited_line[1:]))
Done.

Of course, you will have to turn the digits from string to integers somewhere in the loop

Hi Wavic,
I've almost gotten it!
The only problem left with it is that 'number' in the inner dictionary has the wrong value.
The line of code you helped me with is from index 1, everything is right except for the value of 'number', which is given the
parts[1]
when that is the key for the larger dictionary.

Is there a way to get all of the indices excluding parts[1]?
Here's the code:
def reader(filename):
    file_reader = open(filename)
    results = []
    innerdict = {}
    outerdict = {}

    for line in file_reader:
        line = line.replace("\n", "")
        parts = line.split(" ")
        line_tuple = (int(parts[0]), parts[1], int(parts[2]), int(parts[3]), float(parts[4]))
        key = line_tuple[1]

     #   innerdict["number"] = line_tuple[0]
      #  innerdict["grade"] = line_tuple[2]
       # innerdict["total"] = line_tuple[3]
        #innerdict["weight"] = line_tuple[4]
        outerdict[parts[1]] = dict(zip(['number','grade','total','weight'], parts[1:]))
        
         
        #outerdict[key] = innerdict
    return outerdict
Here's the output. It's so close!
Output:
{'exam_1': {'grade': '95', 'total': '100', 'weight': '0.5', 'number': 'exam_1'}, 'test_1': {'grade': '90', 'total': '100', 'weight': '0.25', 'number': 'test_1'}, 'assignment_1': {'grade': '85', 'total': '100', 'weight': '0.25', 'number': 'assignment_1'}}
Reply


Messages In This Thread
Looping to Create Nested Dictionary - by gngu2691 - Dec-15-2017, 10:29 PM
RE: Looping to Create Nested Dictionary - by wavic - Dec-15-2017, 11:04 PM
RE: Looping to Create Nested Dictionary - by gngu2691 - Dec-16-2017, 12:00 AM
RE: Looping to Create Nested Dictionary - by wavic - Dec-16-2017, 09:54 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  create empty sets for keys in a dictionary and add values to the set naughtysensei 1 2,590 Nov-03-2020, 08:32 AM
Last Post: DeaD_EyE
  how can i create a dictionary of dictionaries from a file Astone 2 2,363 Oct-26-2020, 02:40 PM
Last Post: DeaD_EyE
  nested looping with list cap510 2 1,997 Sep-10-2020, 04:51 AM
Last Post: cap510
  nested dictionary Maxime 3 3,684 Mar-14-2019, 07:19 AM
Last Post: perfringo
  Looping through a dictionary for every other value fad3r 15 9,856 Jan-25-2018, 07:12 PM
Last Post: j.crater

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020