8

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

Brian Leach
  • 3,974
  • 8
  • 36
  • 75

2 Answers2

9

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')
Eric Renouf
  • 13,950
  • 3
  • 45
  • 67
  • 1
    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 http://stackoverflow.com/questions/15228651/how-to-parse-json-string-containing-nan-in-node-js) – Brian Leach Feb 18 '16 at 20:09
4

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.

malhar
  • 562
  • 1
  • 9
  • 21