reading of csv into dictionary, first line becomes the name
Question: in python I have a csv file, which has lots of parameters in it like:

    
    
    Name, Surname, Address1, Address2, email, etc
    Adam1,Smith1,12 Connaugh Rd.,,adamsmith@gmail.com, etc...
    Adam2,Smith2,12 Connaugh Rd.,,adamsmith@gmail.com, etc...
    Adam3,Smith3,12 Connaugh Rd.,,adamsmith@gmail.com, etc...
    

How do I read it, so first line Name, Surname, Address1, Address2, email, etc
becomes the name of parameter in dictionary? So I can get

    
    
    Dict{Name:Adam1,Adam2, Adam3
         Surname: Smith1,Smith2,Smith3
         Address1: 12 Connaugh Rd.,12 Connaugh Rd.,12 Connaugh Rd.
            etc.}
    

Since I'm going to use it in future, is that the best way to work with csv's
or there is something better?

Update1: ripr(row) gives:

    
    
    {None: ['\tSales Record Number', 'User Id', 'Buyer Full name', 'Buyer Phone Number', 'Buyer Email', 'Buyer Address 1', 'Buyer Address 2', 'Buyer Town/City', 'Buyer County', 'Buyer Postcode', 'Buyer Country', 'Item Number', 'Item Title', 'Custom Label', 'Quantity', 'Sale Price', 'Included VAT Rate', 'Postage and Packaging', 'Insurance', 'Cash on delivery fee', 'Total Price', 'Payment Method', 'Sale Date', 'Checkout Date', 'Paid on Date', 'Dispatch Date ', 'Invoice date', 'Invoice number', 'Feedback left', 'Feedback received', 'Notes to yourself', 'PayPal Transaction ID', 'Delivery Service', 'Cash on delivery option', 'Transaction ID', 'Order ID', 'Variation Details']}
    {None: ['3528', 'steve33559', 'Steven sdf', '45678', 'sdfghj@dfgj.com', '1 sdfgh Road, ', '', 'dfgh', 'dfgh', 'ertyu', 'United Kingdom', '151216259484', 'Small stuff ', '', '1', '\xa311.99', '', '\xa30.00', '\xa30.00', '', '\xa311.99', 'PayPal', '21-Mar-14', '21-Mar-14', '21-Mar-14', '', '', '', 'Yes', '', '', '384858394n5838f48', 'Other 24 Hour Courier', '', '49503847573848', '', '']}
    {None: ['3529', 'buyretry13', 'Tariq fhb', '345678', 'buyretry@uk.com', '80 rtyukfd Road', '', 'Manchester', 'wertyuk', 'M16 1KY', 'United Kingdom', '76543283858', 'Apple iPhone 5', '100329', '1', '\xa31.95', '', '\xa30.00', '\xa30.00', '', '\xa31.95', 'PayPal', '21-Mar-14', '21-Mar-14', '21-Mar-14', '', '', '', 'Yes', '', '', '45678723456', 'Royal Mail 2nd Class', '', '3456785737', '', '']}
    


Answer: You can use `zip()` to transpose columns to rows, and apply that to a
dictionary comprehension to extract the first element as the key:

    
    
    import csv
    
    with open(yourfile, 'rb') as infile:
        reader = csv.reader(infile)
        result = {c[0]: c[1:] for c in zip(*reader)}
    

This produces one dictionary, each with all entries in a column as a list of
values.

You'd be better of using
[`csv.DictReader()`](https://docs.python.org/2/library/csv.html#csv.DictReader)
here however. This produces a dict object _per row_ :

    
    
    import csv
    
    with open(yourfile, 'rb') as infile:
        reader = csv.DictReader(infile)
        for row in reader:
            print row
    

where `row` is then `{'Name': 'Adam1', 'Surname': 'Smith1', 'Address1':
'Connaugh rd.', ...}` for the first row, `{'Name': 'Adam2', 'Surname':
'Smith2', 'Address1': 'Connaugh rd.', ...}`, etc. The `DictReader()` object
takes the keys from the first row in the CSV data.

This keeps each row of data together as one easy-to-access object instead of
having to correlate your data between separate rows.

Demo:

    
    
    >>> import csv
    >>> sample = '''\
    ... Name,Surname,Address1,Address2,email,etc
    ... Adam1,Smith1,12 Connaugh Rd.,,adamsmith@gmail.com,etc...
    ... Adam2,Smith2,12 Connaugh Rd.,,adamsmith@gmail.com,etc...
    ... Adam3,Smith3,12 Connaugh Rd.,,adamsmith@gmail.com,etc...
    ... '''
    >>> reader = csv.DictReader(sample.splitlines())
    >>> print next(reader)
    {'Surname': 'Smith1', 'Name': 'Adam1', 'Address1': '12 Connaugh Rd.', 'Address2': '', 'etc': 'etc...', 'email': 'adamsmith@gmail.com'}
    >>> print next(reader)
    {'Surname': 'Smith2', 'Name': 'Adam2', 'Address1': '12 Connaugh Rd.', 'Address2': '', 'etc': 'etc...', 'email': 'adamsmith@gmail.com'}
    >>> print next(reader)
    {'Surname': 'Smith3', 'Name': 'Adam3', 'Address1': '12 Connaugh Rd.', 'Address2': '', 'etc': 'etc...', 'email': 'adamsmith@gmail.com'}
    

