user2791993
user2791993

Reputation: 3

Splitting json data in python

I'm trying to manipulate a list of items in python but im getting the error "AttributeError: 'list' object has no attribute 'split'" I understand that list does not understand .split but i don't know what else to do. Below is a copy paste of the relevant part of my code.

tourl = 'http://data.bitcoinity.org/chart_data'
tovalues = {'timespan':'24h','resolution':'hour','currency':'USD','exchange':'all','mining_pool':'all','compare':'no','data_type':'price_volume','chart_type':'line_bar','smoothing':'linear','chart_types':'ccacdfcdaa'}
todata = urllib.urlencode(tovalues)
toreq = urllib2.Request(tourl, todata)
tores = urllib2.urlopen(toreq)
tores2 = tores.read()
tos = json.loads(tores2)
tola = tos["data"]
for item in tola:
    ting = item.get("values")
    ting.split(',')[2]       <-----ERROR
    print(ting)

To understand what i'm trying to do you will also need to see the json data. Ting outputs this:

[
  [1379955600000L, 123.107310846774], [1379959200000L, 124.092526428571],
  [1379962800000L, 125.539504822835], [1379966400000L, 126.27024617931],
  [1379970000000L, 126.723474983766], [1379973600000L, 126.242406356837],
  [1379977200000L, 124.788410570987], [1379980800000L, 126.810084904632],
  [1379984400000L, 128.270580796748], [1379988000000L, 127.892411269036],
  [1379991600000L, 126.140579640523], [1379995200000L, 126.513705084746],
  [1379998800000L, 128.695124951923], [1380002400000L, 128.709738051044],
  [1380006000000L, 125.987767097378], [1380009600000L, 124.323433535528],
  [1380013200000L, 123.359378559603], [1380016800000L, 125.963250678733],
  [1380020400000L, 125.074618194444], [1380024000000L, 124.656345088853],
  [1380027600000L, 122.411303435449], [1380031200000L, 124.145747100372],
  [1380034800000L, 124.359452274881], [1380038400000L, 122.815357211394],
  [1380042000000L, 123.057706915888]
]

[
  [1379955600000L, 536.4739135], [1379959200000L, 1235.42506637],
  [1379962800000L, 763.16329656], [1379966400000L, 804.04579319],
  [1379970000000L, 634.84689741], [1379973600000L, 753.52716718], 
  [1379977200000L, 506.90632968], [1379980800000L, 494.473732950001],
  [1379984400000L, 437.02095093], [1379988000000L, 176.25405034],
  [1379991600000L, 319.80432715], [1379995200000L, 206.87212398],
  [1379998800000L, 638.47226435], [1380002400000L, 438.18036666],
  [1380006000000L, 512.68490443], [1380009600000L, 904.603705539997],
  [1380013200000L, 491.408088450001], [1380016800000L, 670.275397960001],
  [1380020400000L, 767.166941339999], [1380024000000L, 899.976089609997], 
  [1380027600000L, 1243.64963909], [1380031200000L, 1508.82429811],
  [1380034800000L, 1190.18854705], [1380038400000L, 546.504592349999], 
  [1380042000000L, 206.84883264]
]

And ting[0] outputs this:

[1379955600000L, 123.187067936508]
[1379955600000L, 536.794013499999]

What i'm really trying to do is add up the values from ting[0-24] that comes AFTER the second comma. This made me try to do a split but that does not work

Upvotes: 0

Views: 29322

Answers (2)

Martijn Pieters
Martijn Pieters

Reputation: 1124988

You already have a list; the commas are put there by Python to delimit the values only when printing the list.

Just access element 2 directly:

print ting[2]

This prints:

[1379962800000, 125.539504822835]

Each of the entries in item['values'] (so ting) is a list of two float values, so you can address each of those with index 0 and 1:

>>> print ting[2][0]
1379962800000
>>> print ting[2][1]
125.539504822835

To get a list of all the second values, you could use a list comprehension:

second_vals = [t[1] for t in ting]

Upvotes: 4

BrenBarn
BrenBarn

Reputation: 251598

When you load the data with json.loads, it is already parsed into a real list that you can slice and index as normal. If you want the data starting with the third element, just use ting[2:]. (If you just want the third element by itself, just use ting[2].)

Upvotes: 1

Related Questions