updating values in dictionary when there is duplicate column

Question:

I am trying to parse my csv file into a dictionary in Python. I have two switches switch1 and switch2 which have different parameters. Switch1 has different ports which have different sent and received packets. How can I have all the switch1 parameters in key switch1 and all switch2 parameters in switch2 key. Here is my code:

def create(excel_filename):
    ctr = 0
    #excel_filename = "Switch.csv"
    switchs = {}

    with open(excel_filename, "r") as excel_csv:
        for line in excel_csv:
            if ctr == 0:
                ctr+=1  # Skip the coumn header
            else:
                # save the csv as a dictionary
                switch,port,ibps,obps = line.replace(' ','').strip().split(',')
                if switch not in switchs:
                    switchs[switch] = {'port': [port], 'ibps': [ibps], 'obps': [obps]}
                else:
                    switchs[switch].update({'port': [port], 'ibps': [ibps], 'obps': [obps]})
    return switchs

s = create("machine1.csv")
print(s)

This is my csv file machine.csv

switch,port,sent,received
switch1,ge-0/1,5800,5800
switch1,ge-0/2,1000,5700
switch2,ge-0/3,2000,3000
switch2,ge-0/4,3000,4000

I want my output to be like this:

{'switch1': {'port': ['ge-0/1', 'ge-0/2'], 'sent': ['5800''1000'], 'received': ['1000','5700']}, 'switch2': {'port': ['ge-0/3','ge-0/4'], 'sent': ['2000','3000'], 'received': ['3000','4000']}}

But instead my output looks like:

{'switch1': {'port': ['ge-0/2'], 'sent': ['100000'], 'received': ['57000000']}, 'switch2': {'port': ['ge-0/4'], 'sent': ['3000000'], 'received': ['40000000']}}

What should I do to make my output look like how I want it?
Asked By: Juhi

||

Answers:

You need to append to each list in the dictionary, not update the whole dictionary. .update() doesn’t concatenate the values.

                else:
                    switchs[switch]['port'].append(port)
                    switchs[switch]['ibps'].append(ibps)
                    switchs[switch]['obps'].append(obps)
Answered By: Barmar
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.