Home > Software engineering >  make dictionaries from list with multiple values for each key
make dictionaries from list with multiple values for each key

Time:11-03

We need to make two dictionaries, one for prices and another for quantities from the same text file called Initial_inventory-1.txt. Both dictionaries will have the product name as the key in the dictionary.

My output gives a dictionary with the names, prices, and then the first letter of the name and I don't know why. It happens for both dictionaries.

def read_file(file_name, prices, quantities):
    file = open(file_name, 'r')

    for line in file:
        product = line.strip('\n').split(';')
        name, price = product[0], product[1]
        prices[name] = price
        for price in product[0]:
            prices.setdefault(price, []).append(name)
        name, quantity = product[0], product[2]
        quantities[name] = quantity
        for quantity in product[0]:
            quantities.setdefault(quantity, []).append(name)
        
            
    print(prices)
    print(quantities)
    

main function:

def main():
    #init dictionaries
    prices = {}
    quantities = {}
    #read_file
    read_file("initial_inventory-1.txt", prices, quantities)
main()

There is more to the assignment, which is why they are in those functions, I CANNOT get rid of them. Thank you in advance!

CodePudding user response:

product[0] is the product name, which is a string. When you iterate over that, you're iterating over the characters in the name.

The keys of the prices and quantities dictionaries should be the name. You should use that as the first argument to setdefault(). You shouldn't assign to the dictionary first, that's replacing the list of prices and quantities with this price and quantity.

def read_file(file_name, prices, quantities):
    file = open(file_name, 'r')

    for line in file:
        name, price, quantity = line.strip('\n').split(';')
        prices.setdefault(name, []).append(price)
        quantities.setdefault(name, []).append(quantity)
        
            
    print(prices)
    print(quantities)
  • Related