#python
#python
Вопрос:
Пытаюсь запустить код, в котором я создаю пустой список путем повторения событий из json и добавляю идентификатор пользователя любого пользователя, который сделал событие домашней страницы, в пустой список. Я пытаюсь использовать условный синтаксический анализ, чтобы анализировать только значение ключа ‘name’ с парой ‘Посещенная домашняя страница’ из events.json
Мой код выглядит следующим образом:
import json
#step 1 -- read events file into string
with open('events.json') as events_data:
#step 2 -- convert string to json object (json.load(string)
events_data = json.load(events_data)
#print (events_data['events'][0]['name'])
#print(events_data.keys())
#with open ("data/events.json") as events_file:
#step 3 -- create empty list; iterate events list and append userid of any user who did homepage event into the empty list
#that gives us set of user ids who did homepage event
homeuserid = []
for i in events_data['events']:
homeuserid[i] = i ['name'] ['Visited home page']
print(homeuserid)
Однако, когда я запускаю код, я получаю следующую ошибку, и я не уверен, почему:
Traceback (most recent call last):
File "run.py", line 34, in <module>
homeuserid[i] = i ['name'] ['Visited home page']
TypeError: string indices must be integers
Пример JSON (events.json):
{
"events": [
{
"name": "Added item to cart",
"timestamp": 1422119921,
"user_id": "5a5598f2-f7db-420e-9b8e-52a9ad694bc1"
},
{
"name": "Visited product page",
"timestamp": 1409554014,
"user_id": "4683c9b6-3c8b-4215-a401-a9bbfde833ee"
},
{
"name": "Visited about page",
"timestamp": 1430938313,
"user_id": "26a1593b-b17d-4389-aa93-4a1c9c0e9c67"
},
{
"name": "Added item to cart",
"timestamp": 1427447392,
"user_id": "e71f2ee8-09ce-412b-92e1-3c6c0a90dda8"
},
Комментарии:
1.
event['name']
это строка, которая может быть проиндексирована только целым числом.2. Кроме того,
i
это запись из ваших событий иhomeuserid
список.homeuserid[i]
не имеет смысла.3. Комментарии в вашем коде читать сложнее, чем было бы, если бы вы их пропустили.
Ответ №1:
Вот правильный способ сделать это, нет причин обрабатывать файл дважды. Обратите внимание, что результирующий список может быть пустым, если 'Visited home page'
событий нет.
import json
filepath = 'events.json'
with open(filepath) as events_file:
events_data = json.load(events_file)
homeuserids = []
for event in events_data['events']:
if event['name'] == 'Visited home page':
homeuserids.append(event['user_id'])
print(homeuserids)