Задать вопрос
@Megos

Как получить из json значение поиском по списку?

Здравствуйте!

Есть json:
{
    "applist": {
        "apps": [{
            "appid": 1941401,
            "name": "ASD"
        }, {
            "appid": 2170321,
            "name": "SDF"
        }, {
            "appid": 1825161,
            "name": "DFG"
        },


Есть список названий в csv. CSV открываю по строкам и пытаюсь каждую строку найти в json:

cr = csv.reader(decoded_content.splitlines(), delimiter=',')
        new_list = list(cr)
       for app_name in new_list:
            app_name = str(app_name)
            print(app_name) # выводит название из файла по строкам
            for app_item in parsed_steam_list['applist']['apps']:
                #print(app_item['name']) - выводит названия из json по строкам
                if (app_item['name'] == app_name):  # не работает
                    app_id = app_item['appid']
                    print(app_id)


В результате хочу получить список id, соответствующих этим названиям.

Если заменить app_name в строке, которая не работает на название, то все работает. Значит не работает именно сравнение app_name с app_item['name']. Но я вроде как привел элемент списка к строке и app_name уже строка. Почему же она не сравнивается?
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Megos Автор вопроса
Строку из первого списка надо было прводить не через str, a через join.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
Можно отдельную функцию для поиска сделать:
lst = {
    "applist": {
        "apps": [{
            "appid": 1941401,
            "name": "ASD"
        }, {
            "appid": 2170321,
            "name": "SDF"
        }, {
            "appid": 1825161,
            "name": "DFG"
        }]
        }
    }

def find_name(appid):
    if res := list(filter(lambda x: x['appid'] == appid, lst['applist']['apps'])):
        return res[0]['name']
    return None
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы