Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #80198

Re: generating unique variable name via loops

From Peter Otten <__peter__@web.de>
Subject Re: generating unique variable name via loops
Date 2014-11-04 17:06 +0100
Organization None
References (2 earlier) <m3ajo4$kit$1@dont-email.me> <mailman.15445.1415108267.18130.python-list@python.org> <ad63b305-5ffd-41b3-bb58-080386a90154@googlegroups.com> <mailman.15450.1415113261.18130.python-list@python.org> <67a561c5-82db-4a98-a9d2-d5ea18a74c50@googlegroups.com>
Newsgroups comp.lang.python
Message-ID <mailman.15455.1415117210.18130.python-list@python.org> (permalink)

Show all headers | View raw


Fatih Güven wrote:

> 4 Kasım 2014 Salı 17:01:17 UTC+2 tarihinde Peter Otten yazdı:
>> 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
>> $
> 
> 
> Thanks for your concern, I will try this. Actually, the main focus is that
> are there any other Paul in my team. So i want to create a simple ID for
> employee to distinguish two Paul. I belive that you have a solution for
> this.

The easiest is to use the index:

#!/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 index, employee in enumerate(employees, 1):
        print("#{}, name: {}".format(index, employee.name))

    while True:
        index = input("enter an index (1...{}) ".format(len(employees)))
        if index == "":
            print("That's all folks")
            break
        index = int(index) -1
        employee = employees[index]
        print("Name: {0.name}, Salary: {0.salary}".format(employee))

If the ID must stay the same for two runs of the script you have to put it 
into the text file as another column. However, you are soon reaching 
territory where a database is more convenient than a text file.

Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

generating unique variable name via loops Fatih Güven <mfthguven@gmail.com> - 2014-11-04 03:29 -0800
  Re: generating unique variable name via loops Fatih Güven <mfthguven@gmail.com> - 2014-11-04 04:48 -0800
    Re: generating unique variable name via loops Veek M <vek.m1234@gmail.com> - 2014-11-04 18:49 +0630
      Re: generating unique variable name via loops Peter Otten <__peter__@web.de> - 2014-11-04 14:37 +0100
        Re: generating unique variable name via loops Fatih Güven <mfthguven@gmail.com> - 2014-11-04 05:53 -0800
          Re: generating unique variable name via loops Peter Otten <__peter__@web.de> - 2014-11-04 16:00 +0100
            Re: generating unique variable name via loops Fatih Güven <mfthguven@gmail.com> - 2014-11-04 07:36 -0800
              Re: generating unique variable name via loops Peter Otten <__peter__@web.de> - 2014-11-04 17:06 +0100
          Re: generating unique variable name via loops Denis McMahon <denismfmcmahon@gmail.com> - 2014-11-04 17:15 +0000
          Re: generating unique variable name via loops Tim Chase <python.list@tim.thechases.com> - 2014-11-04 09:05 -0600
      Re: generating unique variable name via loops Fatih Güven <mfthguven@gmail.com> - 2014-11-04 05:45 -0800
        Re: generating unique variable name via loops Veek M <vek.m1234@gmail.com> - 2014-11-04 19:20 +0630
        Re: generating unique variable name via loops Denis McMahon <denismfmcmahon@gmail.com> - 2014-11-04 17:14 +0000
      Re: generating unique variable name via loops Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2014-11-04 09:00 -0500
  Re: generating unique variable name via loops Peter Otten <__peter__@web.de> - 2014-11-04 14:09 +0100
  Re: generating unique variable name via loops Matthew Ruffalo <mmr15@case.edu> - 2014-11-04 10:04 -0500

csiph-web