使用列表理解将值分配给字典键[重复]

Posted

技术标签:

【中文标题】使用列表理解将值分配给字典键[重复]【英文标题】:assigning values to dictionary keys with list comprehension [duplicate] 【发布时间】:2019-03-14 10:01:25 【问题描述】:

这主要是一个好的/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)

我能做到最好?

【问题讨论】:

我想我被挂断了,因为我确信我必须事先初始化我的字典。我也不为我能够搜索以前回答的问题而感到自豪...... 【参考方案1】:

使用字典理解!

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

【讨论】:

【参考方案2】:

是的,使用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) 计算之前。

【讨论】:

以上是关于使用列表理解将值分配给字典键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

列表分配中的字典导致奇怪的输出[重复]

增强的 for 循环不适用于将值分配给数组(Java)[重复]

字典列表中的列表理解[重复]

在 Kdb 中,如何将每个符号列表分配给值列表

Python - 用于将值从列表分配到 DataFrame 列表的列表理解表达式

将值分配给数字因子水平[重复]