使用列表理解为字典键赋值

assigning values to dictionary keys with list comprehension

这主要是good/pythonic风格的问题。我有一本字典,其中包含值列表,即

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)

我能做到最好吗?

是的,通过使用 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) 完全相同键的计算之前。

使用字典理解!

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