#python #list #dictionary
Вопрос:
У меня есть список словарей, который выглядит так:
[{'Score': 0.9979117512702942, 'Type': 's_merchant', 'Text': 'merchants', 'BeginOffset': 7, 'EndOffset': 16}, {'Score': 0.9997400045394897, 'Type': 'metric', 'Text': 'number of errors', 'BeginOffset': 22, 'EndOffset': 38}, {'Score': 0.9984105825424194, 'Type': 'metric', 'Text': 'order rate', 'BeginOffset': 43, 'EndOffset': 53}, {'Score': 0.997801661491394, 'Type': 'user_service', 'Text': 'search requests', 'BeginOffset': 57, 'EndOffset': 72}, {'Score': 0.999964714050293, 'Type': 'PROPERTY', 'Text': 'revenue', 'BeginOffset': 20, 'EndOffset': 27}, {'Score': 0.999964714050293, 'Type': 'PROPERTY_VAL', 'Text': 'gold', 'BeginOffset': 28, 'EndOffset': 32}, {'Score': 0.9646918177604675, 'Type': 'ORGANIZATION', 'Text': 'Gymshark', 'BeginOffset': 22, 'EndOffset': 30}]
Мне нужно извлечь все значения из ключей » Тип «(который в основном является «s_merchant» для первого словаря) и «Текст» ( который является «продавцами» для первого словаря) из всех словарей в списке.
Результатом должен быть список, что-то вроде этого:
Type=['s_merchant','metric','user_service','PROPERTY','PROPERTY_VAL','ORGANIZATION']
Text=['merchants','number of errors','order rate','revenue','gold','Gymshark']
Есть ли функция/метод для этого?
Спасибо за помощь.
Ответ №1:
Вы можете использовать понимание списка python, которое позволяет использовать более компактный synthax, чем обычный цикл:
l = [{'Score': 0.9979117512702942, 'Type': 's_merchant', 'Text': 'merchants', 'BeginOffset': 7, 'EndOffset': 16}, {'Score': 0.9997400045394897, 'Type': 'metric', 'Text': 'number of errors', 'BeginOffset': 22, 'EndOffset': 38}, {'Score': 0.9984105825424194, 'Type': 'metric', 'Text': 'order rate', 'BeginOffset': 43, 'EndOffset': 53}, {'Score': 0.997801661491394, 'Type': 'user_service', 'Text': 'search requests', 'BeginOffset': 57, 'EndOffset': 72}, {'Score': 0.999964714050293, 'Type': 'PROPERTY', 'Text': 'revenue', 'BeginOffset': 20, 'EndOffset': 27}, {'Score': 0.999964714050293, 'Type': 'PROPERTY_VAL', 'Text': 'gold', 'BeginOffset': 28, 'EndOffset': 32}, {'Score': 0.9646918177604675, 'Type': 'ORGANIZATION', 'Text': 'Gymshark', 'BeginOffset': 22, 'EndOffset': 30}]
Type = [i['Type'] for i in l]
Text = [i['Text'] for i in l]
Чтобы удалить повторяющиеся значения в списке, хорошим вариантом является использование объекта набора, такого как:
list(set(Type))
На вашем примере просто сделайте:
Type = list(set([i['Type'] for i in l]))
Комментарии:
1. значение «метрика» появляется дважды, есть ли способ получить уникальные значения?
2. Смотрите мои обновления, просто сделайте
Type = list(set([i['Type'] for i in l]))
Ответ №2:
Type = []
Text = []
for s in list_dicts :
Type.append(s['Type'])
Text.append(s['Text'])
Или с меньшим количеством кода, используя списки понимания (но это совершенно одно и то же) :
Type = [s['Type'] for s in list_dicts]
Text = [s['Text'] for s in list_dicts]