使用列表理解为字典键分配值

时间:2018-10-09 15:05:43

标签: python dictionary list-comprehension dictionary-comprehension

这主要是关于良好/ Python风格的问题。我有一本字典,上面有值列表,即

my_dict = {"a": a_list, "b": b_list, "c": c_list}

,依此类推。我也有一个空的带有相同键的字典,我想在其中将这些列表的平均值与它们的键相对应。如果我不是使用第二个字典,而是使用一个嵌套列表,可以这样做

mean_lists = [[key, sum(l)/len(l)] for key, l in my_dict.items() if l]

提供输出

[["a", a_mean], ["b", b_mean], ["c", c_mean]]

对我来说似乎很整洁。有没有一种方法可以很好地将其输出为字典,或者是这样的:

mean_dict = {key: [] for key in my_dict}
for key, l in my_dict.items():
    if l:
        mean_dict[key] = sum(l)/len(l)

我能做的最好的事?

2 个答案:

答案 0 :(得分:4)

是,通过使用dictionary comprehension;您已经具有在列表理解中一起构建每个键和值的部分,只需稍微修改一下语法即可:

{key: sum(l) / len(l) for key, l in my_dict.items() if l}

语法与列表理解紧密相关,但不是每个列表元素值都有一个表达式,而是有两个表达式:一个用于键(在上例中仅为key),另一个用于关联值(上面的sum(l) / len(l))。

在创建从键到空列表的字典映射时,您似乎已经熟悉语法:

mean_dict = {key: [] for key in my_dict}

在使用单独的循环以完全相同的键的sum(l) / len(l)计算替换那些列表之前。

答案 1 :(得分:2)

使用字典理解!

mean_lists = {key:sum(l)/len(l) for key, l in my_dict.items() if l}