Как извлечь определенные значения из списка словарей?

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