Create object for item in list

H

Helge

I wonder how this can be accomplished:

I've got a list, containing several strings. The strings look like
this:

[ "Name1/N1/N2/N3" , "Name2/N1/N2/N3" , "..." ]

I would like to create one object for each item in the list, and the
name of the object should be "str(item.split("/")[0])".

I've tried this, but it won't work:

for item in list:
str(item.split("/")[0]) = class(item)

....
 
R

Russell Blau

Helge said:
I wonder how this can be accomplished:

I've got a list, containing several strings. The strings look like
this:

[ "Name1/N1/N2/N3" , "Name2/N1/N2/N3" , "..." ]

I would like to create one object for each item in the list, and the
name of the object should be "str(item.split("/")[0])".

I've tried this, but it won't work:

for item in list:
str(item.split("/")[0]) = class(item)

...

A couple of small points before getting to the big issue:

1. "class" is a keyword, and can't be used in the context you have it. You
should define your class (which I'll call "C") earlier in your program.

2. "list" is a type name, and shouldn't be used as a variable name, so I'll
change it to "mylist".

2. The str() function is unnecessary, since item.split("/")[0] is already a
string by definition.

Now, I assume what you are trying to do is get Python to create an instance
of your class C, and assign it to the variable whose name is given by the
evaluation of item.split("/")[0]. In other words, you want Python to
execute a series of statements that look like this:

Name1 = C("Name1/N1/N2/N3")

What you've done doesn't quite accomplish this; the left side of your
assignment expression evaluates to a string, so in effect you're telling
Python to execute:

"Name1" = C("Name1/N1/N2/N3")

(At least that's how I interpret what you mean by "class(item)".) This
doesn't make sense to the interpreter, any more than "Spam" = 7 would. But
you can get Python to execute code provided to it inside a string, as
follows:

for item in mylist:
exec "%s = C('%s')" % (item.split("/")[0], item)

Good luck... Needless to say, you need to be careful about where the
contents of "mylist" come from, or you could end up overwriting other
variables that your program needs to function correctly.
 
T

Terry Reedy

Helge said:
I wonder how this can be accomplished:

I've got a list, containing several strings. The strings look like
this:

[ "Name1/N1/N2/N3" , "Name2/N1/N2/N3" , "..." ]

I would like to create one object for each item in the list, and the
name of the object should be "str(item.split("/")[0])".

Binding and using dynamic names in the global (or function local) namespace
is generally a nuisance. The standard idiom is to use a separate
dictionary as a namespace for just those items. Something like

myobs = {}
for datastring in namedata:
data = datastring.split('/')
myobs[data[0]] = myclass(*data[1:])

Terry J. Reedy
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top