这主要是关于良好/ 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)
我能做的最好的事?
答案 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}