Easier way to do this?

Irv Kalb Irv at furrypants.com
Wed Oct 4 20:11:49 EDT 2017


I'm assuming from your posts that you are not a student.  If that is the case, look at my solution below.

> On Oct 4, 2017, at 9:42 AM, 20/20 Lab <lab at 2020fresno.com> wrote:
> 
> Looking for advice for what looks to me like clumsy code.
> 
> I have a large csv (effectively garbage) dump.  I have to pull out sales information per employee and count them by price range. I've got my code working, but I'm thinking there must be a more refined way of doing this.
> 
> ---snippet of what I have---
> 
> EMP1 = [0,0]
> EMP2 = [0,0]
> EMP3 = [0,0]
> 
> for line in (inputfile):
>     content = line.split(",")
>     if content[18] == "EMP1":
>         if float(content[24]) < 99.75:
>             EMP1[0] += 1
>         elif float(content[24]) > 99.74:
>             EMP1[1] += 1
>     if content[18] == "EMP2":
>         if float(content[24]) < 99.75:
>             EMP2[0] += 1
>         elif float(content[24]) > 99.74:
>             EMP2[1] += 1
>     if content[18] == "EMP3":
>         if float(content[24]) < 99.75:
>             EMP3[0] += 1
>         elif float(content[24]) > 99.74:
>             EMP3[1] += 1
> 
> and repeat if statements for the rest of 25+ employees.  I can make a list of the employees, but I'd prefer to pull them from the csv, as our turnover is rather high (however this is not important).  I'm thinking another "for employee in content[18]" should be there, but when I tried, my numbers were incorrect.
> 
> Any help / advice is appreciated,
> 
> Matt
> 


You could certainly use the csv module if you want, but this builds on your start of dealing with the data line by line.

Completely untested, but this approach works by building a dictionary on the fly from your data.  Each key is an employee name.  The data associated with each key is a two item list of counts.


# Constants
NAME_INDEX = 18
SALES_INDEX = 24
THRESHHOLD = 99.75

salesCountDict = {}  # start with an empty dict

for line in (inputfile):
    content = line.split(",")  # split the line into a list
    name = content[NAME_INDEX]  # extract the name from the content list

    # If we have not seen this employee name before, add it to the dictionary
    # like key value pair:     '<Employee Name>': [0, 0]
    if not(name in employeeDataDict):
        salesCountDict[name] = [0, 0]

    price = float(content[SALES_INDEX])  # extract the price

   # If the price is under some threshhold, increment one value in the associated sales list
   # otherwise increment the other
    if price < THRESHHOLD:
        salesCountDict[name][0] += 1
    else:
        salesCountDict[name][1] += 1
    

# Now you should have a dictionary.  Do what you want with it.  For example:

for name in salesCountDict:
    salesList = salesCountDict[name]
    print(name, salesList)    # Assuming Python 3

    
        





More information about the Python-list mailing list