generating unique variable name via loops

Peter Otten __peter__ at web.de
Tue Nov 4 16:00:43 CET 2014


Fatih Güven wrote:

> 4 Kasım 2014 Salı 15:37:59 UTC+2 tarihinde Peter Otten yazdı:
>> Veek M wrote:
>> 
>> > Fatih Güven wrote:
>> > 
>> >> 4 Kas?m 2014 Sal? 13:29:34 UTC+2 tarihinde Fatih Güven yazd?:
>> >>> I want to generate a unique variable name for list using python.
>> >>> 
>> >>> list1=...
>> >>> list2=...
>> > 
>> > for x in range(1,10):
>> >     exec("list%d = []" % x)
>> 
>> Why would you do this?
> 
> I have a structured and repetitive data. 

I was actually asking "Veek M".

> I want to read a .txt file line
> by line and classified it to call easily. For example employee1 has a
> name, a salary, shift, age etc. and employee2 and other 101 employee have
> all of it.
> 
> Call employee1.name or employee2.salary and assign it to a new variable,
> something etc.

I can only repeat my previous advice. Instead of creating variables for 
employee1, employee2, and so on make a list of employees:

$ cat employees.txt
Peter,3000
Paul,2000
Mary,1000

$ cat employees.py
#!/usr/bin/env python3
import csv

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

if __name__ == "__main__":
    employees = []
    with open("employees.txt") as f:
        for row in csv.reader(f):
            employees.append(Employee(row[0], int(row[1])))

    for employee in employees:
        print(employee.name, "-- salary:", employee.salary, "doubloons")

$ python3 employees.py 
Peter -- salary: 3000 doubloons
Paul -- salary: 2000 doubloons
Mary -- salary: 1000 doubloons

You wouldn't want to reference Paul as employee2 -- what if the order in the 
text file changed? Instead you can make a dict that maps name to employee...

    employees_by_name = {}
    for employee in employees:
        name = employee.name
        if name in employees_by_name:
            raise ValueError("duplicate name {}".format(name))
        employees_by_name[name] = employee

and use that dict to look up an employee:

    while True:
        name = input("enter a name ")
        if name == "":
            print("That's all folks")
            break
        if name not in employees_by_name:
            print("unknown name")
        else:
            print("Salary:", employees_by_name[name].salary, "doubloons")

$ python3 employees.py 
Peter -- salary: 3000 doubloons
Paul -- salary: 2000 doubloons
Mary -- salary: 1000 doubloons
enter a name Peter
Salary: 3000 doubloons
enter a name Mary
Salary: 1000 doubloons
enter a name paul
unknown name
enter a name Paul
Salary: 2000 doubloons
enter a name 
That's all folks
$ 





More information about the Python-list mailing list