检查键值对的字典数组,并相应地更新另一个列表

时间:2019-03-03 14:35:59

标签: python list dictionary

我有多个包含字典的数组。我想检查这些数组,并在迭代数组中的字典时根据遇到的键值对更新另一个列表。

对于以下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循环,但是我没有得到期望的输出,因为每次如果不检查其他条件,如果没有情感出现,列表中将附加0,这会产生错误的输出。我认为可以使用map或lambda函数,但不知道如何开始。

1 个答案:

答案 0 :(得分:1)

您可以创建一个将情感映射到将数组索引映射到计数的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]