Питон - количество элементов JSON перед извлечением данных



Я использую API, который дает мне файл JSON, структурированный следующим образом:



{
offset: 0,
results: [
{
source_link: "http://www.example.com/1",
source_link/_title: "Title example 1",
source_link/_source: "/1",
source_link/_text: "Title example 1"
},
{
source_link: "http://www.example.com/2",
source_link/_title: "Title example 2",
source_link/_source: "/2",
source_link/_text: "Title example 2"
},
...


И я использую этот код в Python для извлечения необходимых мне данных:



import json
import urllib2

u = urllib2.urlopen('myapiurl')
z = json.load(u)
u.close
link = z['results'][1]['source_link']
title = z['results'][1]['source_link/_title']


Проблема в том, что для его использования мне нужно знать номер элемента, из которого я извлекаю данные. Мой results может иметь разную длину каждый раз, поэтому я хочу сначала подсчитать количество элементов в results, чтобы я мог настроить цикл для извлечения данных из каждого элемента.
652   5  

5 ответов:

Чтобы проверить длину ключа результатов:

len(z["results"])

Но если вы просто петляете вокруг них, идеально подходит цикл for:

for result in x["results"]:
    print(result["source_link"])

Вам не нужно было знать длину результата, вы прекрасно справляетесь с циклом for:

for result in z['results']:
    # process the results here

В любом случае, если вы хотите знать длину 'результатов': len(z.results)

Если вы хотите получить длину, вы можете попробовать:

len(z['result'])

Но в python мы обычно делаем следующее:

for i in z['result']:
    # do whatever you like with `i`

Надеюсь, это поможет.

Вам не нужно или, скорее всего, не нужно пересчитывать их, чтобы сделать над ними петлю, вы могли бы сделать:

import json
import urllib2

u = urllib2.urlopen('myapiurl')
z = json.load(u)
u.close
for result in z['results']:
    link = result['source_link']
    title = result['source_link/_title']
    # do something with link/title

Или вы могли бы сделать:

u = urllib2.urlopen('myapiurl')
z = json.load(u)
u.close
link = [result['source_link'] for result in z['results']]
title = [result['source_link/_title'] for result in z['results']]
# do something with links/titles lists

Несколько указателей:

  1. нет необходимости знать длину results, чтобы повторить его. Вы можете использовать for result in z['results'].
  2. lists начните с 0.
  3. Если вам нужен индекс, взгляните на enumerate.

Comments

    Ничего не найдено.