Получение TypeError: строковые индексы должны быть целыми числами. Не уверен, почему

#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)