Hi, please help me. Say I have 2 lines of code below. I want to "print ranking" and have result of "1" (force string to use global variable) instead of the letter "a". What are the methods available?

ranking = "a"

Can you please help me out? I'm noob at python. Thanks.

6 Years
Discussion Span
Last Post by ron126
>>> a = 1
>>> ranking = "a"
>>> print 'ranking is %s' % globals()[ranking]
ranking is 1

This is more of a ugly hack and dont do it like this.
You are better of bulding a dictionary.
Something like this

>>> d = {'ranking_a': 1, 'ranking_b': 2}
>>> d['ranking_a']

If problems post a better description of what you are trying to do.

Edited by snippsat: n/a


Thanks for your reply, but to be more specific, this is what I want to do:

ranking = ["a","b"]
x = ranking[0] + ranking[1] #which is a+b in the ranking list

But now, the problem is that the "a" and "b" in the ranking list is in string and so I can't show the result for my x, even though my global variable does state int value for a and b. *the result should be 3*

Do you know any methods to solve this? Like forcing string to use global variable?

Edited by ron126: n/a

>> my_globals = dict(a=1, b=2)
>>> ranking = ['a', 'b']
>>> x = eval("%s + %s" %(ranking[0], ranking[1]), my_globals)
>>> x

I bet you are not using the correct approach in your code, what you are trying to do to do this kind of indirection?

Edited by pyTony: n/a

>>> a = 1
>>> b = 2
>>> ranking = ['a', 'b']
>>> sum(globals()[i] for i in ranking)

Like this,but not nice.
You see PyTony make a dictionary and than take out values.

But you have to rethink this.
string 'a' and 'b' in ranking is just string not pointing to anything.
You can bind string 'a' 'b' to variable a b.

>>> d = {}
>>> d[ranking[0]] = a
>>> d[ranking[1]] = b
>>> d
{'a': 1, 'b': 2}

Or just make a dictionary in first place,not confusing stuff like now.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.