Как эффективно преобразовать массив multi json в список python, избегая циклов for - PullRequest
1 голос
/ 09 июля 2020

У меня есть массив json в виде

[
  {
    "id": 1, "name": "a"
  },
  {
    "id": 2, "name": "b"
  }
]

Я хочу получить все имена в одном списке. Как и в списке вывода, который должен содержать

["a","b"]

, я могу сделать это с помощью for l oop. Но для l oop требуется так много времени .. Есть ли эффективный способ сделать это в python

import json
jsonString='''[
  {
    "id": 1, "name": "a"
  },
  {
    "id": 2, "name": "b"
  }
]'''
jsonArray=json.loads(jsonString)    
nameList=[]

for eachJson in jsonArray:
    nameList.append(eachJson['name'])

Есть ли более быстрый способ сделать это, как для l oop занимает много времени с большими данными

1 Ответ

2 голосов
/ 09 июля 2020

Прежде всего, быстрота / медленность довольно относительны, вы должны предоставить более подробную информацию о ваших ожиданиях (время, размер данных и т. Д. c ...). Но вы можете использовать понимание списка вместо l oop. Это быстрее.

Пример:

import json

jsonString = """[
  {
    "id": 1, "name": "a"
  },
  {
    "id": 2, "name": "b"
  }
]"""
nameList = [eachJson["name"] for eachJson in json.loads(jsonString)]

Время реализации:

>>> time python test.py

real    0m0.047s
user    0m0.013s
sys     0m0.016s

Время с пониманием списка:

>>> time python test.py

real    0m0.026s
user    0m0.014s
sys     0m0.012s

Как вы можете видеть выше, реальное время почти вдвое меньше с пониманием списка.

РЕДАКТИРОВАТЬ:

Или вы можете измерить время выполнения с помощью модуля time Python.

Например:

import time

start = time.time()
print("hello")
end = time.time()
print(end - start)

Я измерил две реализации с модулем time:

>>> python for_loop.py
6.103515625e-05
>>> python list_comprehension.py
4.60147857666e-05

ПРИМЕЧАНИЕ:

Вы можете найти более-более быстрые Json модули парсера, а затем встроенные в модуле json. Вероятно, модуль yajl - самый быстрый модуль. Подробности: https://github.com/rtyler/py-yajl/

yajl        serialize: 0.180  deserialize: 0.182  total: 0.362
simplejson  serialize: 0.840  deserialize: 0.490  total: 1.331
stdlib json serialize: 2.812  deserialize: 8.725  total: 11.537

Компаратор Python Json парсеров: https://github.com/rtyler/py-yajl/blob/master/compare.py

Или вы можете проверить модуль ultrajson. Он также быстрее встроенного парсера: https://github.com/ultrajson/ultrajson

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...