Home > Back-end >  read from file into a dictionary which value is a tuple
read from file into a dictionary which value is a tuple

Time:01-06

i have this file called chocolates.txt:

Mary;dark;0.5 Steve;dark;0.5 Mary;toffee;2 Mary;white;0.25 Steve;raspberry;1 Mary;milk;1.25

i have to write a code read_data that returns a dictionary like this: >>>read_data('chocolates.txt') {'Mary':[('dark', 0.5), ('toffee', 2.0), ('white, 0.25), ('milk', 1.25)], 'Steve': [('dark', 0.5), ('raspberry': 1.0)]}'

so the dictionary values are lists of tuples. I tried to do something like this (so that first I put all the data into sets and then turn them into tuples but my code doesn't work.

def read_data(file):
d = {}
f = open(file, encoding='utf-8')
for row in file:
    x = row.strip().split(";")
    buyer = x[0]
    if not buyer in d:
        d[buyer] = set()
        kd[buyer].add(x[1:])
    f.close()
    return d`

Is there another way to do that?

CodePudding user response:

You don't need to use sets for this.

Open the file and read one line at a time. Strip any leading/traing whitespace. Split on semi-colon (expect 3 tokens).

Use setdefault to append to a list keyed by the "buyer"

def read_data(file):
    d = {}
    with open(file) as data:
        for line in map(str.strip, data):
            buyer, v, n = line.split(';')
            d.setdefault(buyer, []).append((v, float(n)))
    return d

...should do what you need

  • Related