Проверьте массивы словарей для пары ключ-значение и соответственно обновите другой список - PullRequest
0 голосов
/ 03 марта 2019

У меня есть несколько массивов, содержащих словари.Я хочу проверить эти массивы и обновить другой список в соответствии с парами ключ-значение, встречающимися при переборе словарей внутри массивов.

Так что для следующих 4 массивов чувств:

senti_array1 = [{'senti':'Positive', 'count':15}, {'senti':'Negative', 'count':10}, {'senti':'Neutral', 'count':5}]
senti_array2 = [{'senti':'Positive', 'count':8}, {'senti':'Negative', 'count':4}]
senti_array3 = [{'senti':'Positive', 'count':2}]
senti_array4 = [{'senti':'Negative', 'count':7}, {'senti':'Neutral', 'count':12}]

pos_list=[]
neg_list=[]
neu_list=[]

Если ихПри отрицательном настроении соответствующий список (neg_list) в этом случае должен быть обновлен со значением счетчика, в противном случае в список следует добавить 0, если в массиве нет отрицательного настроения.

конечный результат должен быть:

pos_list=[15, 8, 2, 0]
neg_list=[10, 4, 0, 7]
neu_list=[5, 0, 0, 12]

Я пытался использовать нормальные циклы for, но я не получаю желаемого результата, потому что каждый раз, если проверяется условие else, в список добавляется 0, если нет настроения, чтодает неправильный вывод.Я думаю, что карты или лямбда-функции могут быть использованы для этого, но не знаю, с чего начать.

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете создать dict, который отображает настроения в dict, отображающий индексы массивов в счетчики, так что вы можете перебирать 3 чувства и перебирать индекс по диапазону количества массивов для построения списков счетчиков.С помощью метода dict.get установите для счетчика по умолчанию значение 0:

mapping = {}
for i, l in enumerate((senti_array1, senti_array2, senti_array3, senti_array4)):
    for d in l:
        mapping.setdefault(d['senti'], {})[i] = d['count']
pos_list, neg_list, neu_list = ([mapping.get(s, {}).get(k, 0) for k in range(i + 1)] for s in ('Positive', 'Negative', 'Neutral'))

. При вводе пробы pos_list становится:

[15, 8, 2, 0]

neg_list становится:

[10, 4, 0, 7]

и neu_list становится:

[5, 0, 0, 12]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...