【问题标题】:Sum over list in dict comprehension对字典理解中的列表求和
【发布时间】:2021-11-24 11:22:56
【问题描述】:

我正在研究字典理解。我从一个值是整数列表的字典开始,我想将它转换为具有相同键的字典,但其值是原始列表的总和。这是一个可重现的示例:

n_dict = {4: [4,1,6], 3: [5,3,9], 2: [8,2,10]}
n_sum = {n_key: sum(n) for n_key in n_dict.keys() for n in n_dict[n_key]}
print(n_sum)
# expected result: {4: 11, 3: 17, 2: 20}

不幸的是,我收到以下类型错误,我无法弄清楚原因:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    n_sum = {n_key: sum(n) for n_key in n_dict.keys() for n in n_dict[n_key]}
  File "main.py", line 3, in <dictcomp>
    n_sum = {n_key: sum(n) for n_key in n_dict.keys() for n in n_dict[n_key]}
TypeError: 'int' object is not iterable

【问题讨论】:

  • n 是列表中的单个值,例如4[4, 1, 6] 中,正如错误告诉你的那样,这意味着sum(4) 没有意义。为什么要嵌套循环?

标签: python dictionary list-comprehension dictionary-comprehension


【解决方案1】:

遍历items,同时遍历key和对应的value:

n_dict = {4: [4, 1, 6], 3: [5, 3, 9], 2: [8, 2, 10]}
n_sum = {key: sum(value) for key, value in n_dict.items()}
print(n_sum)

输出

{4: 11, 3: 17, 2: 20}

【讨论】:

    【解决方案2】:

    您无需遍历列表中的项目并尝试使用嵌套循环为列表中的每个 int 调用 sum

    n_dict = {4: [4,1,6], 3: [5,3,9], 2: [8,2,10]}
    n_sum = {n_key: sum(n_dict[n_key]) for n_key in n_dict.keys()}
    print(n_sum)
    

    Demo

    【讨论】:

    • for n_key in n_dict.keys() 可以只是for n_key in n_dict
    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多