【问题标题】: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)

我能做到最好?

【问题讨论】:

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

标签: python dictionary list-comprehension dictionary-comprehension


【解决方案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) 计算之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-25
      • 2021-04-02
      • 2021-06-16
      • 2019-01-23
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多