Я использую набор данных ниже, который использует SQL для запроса данных. Результаты находятся в списке JSON, а не в объекте. Я пытаюсь сделать нарезку, но не могу заставить это работать в списке. Поэтому вместо этого использовались SQL-запросы (Query 1) для фильтрации столбцов. Теперь я пытаюсь взять список параметров и найти его в результатах запроса, чтобы мои результаты отфильтровывались только по элементам в списке. Пример my_list['60', '61', '62', '63', '66', '67', '68', '69', '70', '71', '72] Я хочу, чтобы в результате отображались 5 столбцов, включая только указанные выше участки. Любая помощь ценится, потому что я застрял на несколько дней.
data_url='data.cityofnewyork.us'
data_set='nc67-uf89'
url = Socrata(data_url)
JSON_results = url.get(data_set, limit=100)
print(JSON_results)
Query1 = url.get(data_set, select = "precinct, violation, fine_amount, interest_amount, issuing_agency" where= interest_amount>0",order = "interest_amount DESC", limit=10)
print(Query1)
# this is the result of Query 1 {'precinct': '013', 'violation': 'COMML PLATES-UNALTERED VEHICLE', 'fine_amount': '495', 'interest_amount': '349.72', 'issuing_agency': 'TRAFFIC'}
if Query1['precinct']==mylist:
for i in Query1:
print (i)
#Below is output for JSON_results
[{'plate': 'GDP4579', 'state': 'NY', 'license_type': 'PAS', 'summons_number': '5104469750', 'issue_date': '11/17/2018', 'violation_time': '11:37A', 'violation': 'FAILURE TO STOP AT RED LIGHT', 'fine_amount': '50', 'penalty_amount': '25', 'interest_amount': '0', 'reduction_amount': '0', 'payment_amount': '75', 'amount_due': '0', 'precinct': '000', 'county': 'BK', 'issuing_agency': 'DEPARTMENT OF TRANSPORTATION', 'summons_image': {'url': 'http://nycserv.nyc.gov/NYCServWeb/ShowImage?searchID=VGxSRmQwNUVVVEpQVkdNeFRVRTlQUT09&locationName=_____________________', 'description': 'View Summons'}}]
Я только что отредактировал его с результатами,
#### make sure my_list is str '013' not a int 013 cause '013' not equal to 013.
Query_1 = {'precinct': '013', 'violation': 'COMML PLATES-UNALTERED VEHICLE', 'fine_amount': '495', 'interest_amount': '349.72', 'issuing_agency': 'TRAFFIC'}
my_list = ['013','60', '61', '62', '63', '66', '67', '68', '69', '70', '71', '72']
if Query_1['precinct'] in my_list:
print(Query_1)
Я пробовал это, но получаю сообщение об ошибке, проблема в том, что запрос 1 представляет собой список словарей [{....},{...}]. ниже ошибка, которую я получаю. TypeError: индексы списка должны быть целыми числами или срезами, а не str
Мне пришлось сделать некоторые предположения о структуре данных JSON_Results
, но, надеюсь, это поможет вам в правильном направлении.
# This is the structure I am assuming for json results
import json
JSON_RESULTS = json.loads(
'[{"precinct":"001","fine":32},{"precinct":"002","fine":44},{"precinct":"003","fine":12}]')
print(JSON_RESULTS)
возвращается
[{'precinct': '001', 'fine': 32}, {'precinct': '002', 'fine': 44}, {'precinct': '003', 'fine': 12}]
если это так, то вы сможете отфильтровать эти результаты в цикле for
my_list = ['60', '61', '62', '63', '66', '67', '68', '69', '70', '71', '72']
for jsonResult in JSON_RESULTS:
if jsonResult['precinct'] in my_list:
print(f"{jsonResult['precinct']},{jsonResult['violation']},{jsonResult['fine_amount']},{jsonResult['interest_amount']},{jsonResult['issuing_agency']}")
*редактировать: просто напечатайте нужные столбцы
Вау... Спасибо, сработало. Я был далеко, плюс мне пришлось преобразовать свой список в строки. Я застрял на этом несколько дней.
Можете опубликовать результаты
print(JSON_results)
?