9

I have numerical values that are loaded from a JSON object and are therefore all strings.

I am having issues with making numerical comparisons with these strings. The following makes no sense to me and I was hoping one of you champions could explain..

In[2]: print '100' < '45'
True

In[3]: print '99' < '45'
False

Using Python 2.7

0

2 Answers 2

11

When comparing strings they're compared by the ascii value of the characters. '1' has a value 49, and '4' is 52. So '1' is < '4'. '9' however is 57, so '9' is > '4'.

If you want to compare them numerically you could just int() the strings first like:

print int('100') < int('45')
Sign up to request clarification or add additional context in comments.

1 Comment

I ended up converting all the values in the dictionary to float, although I had to account for nan with an if loop because the JSON parser on the client side (Chrome) was throwing an error with NaN, I had to replace NaN with None (see stackoverflow.com/questions/15228651/…)
5

It basically checks for lexicographic ordering. Check documentation here -

>>> 'b' <'a'
False
>>> 'a' < 'b'
True

In above example, a comes before b, hence 'a' <'b' is true. But, not vica versa. Similarly '1'<'2'. Hence '199999999999' < '5' is true because 1 comes before 5.

3 Comments

Have u verified your claim - '599999999999' < '1' is true
my bad I meant something like this '1999' < '5'. edited in the answer. Thanks @AlokThakur
The document link you provide is so much helpful to me.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.