如何使用字典理解从列表中创建和增加字典中的值

How to create and increment a value in a dictionary from a list using dictionary comprehension

我正在创建一个简单的函数,它接受一个数字列表和 returns 一个包含所有奇数和偶数之和的字典。

我可以使用传统的 for 循环来做到这一点,所以我想知道是否有一种方法可以使用字典理解来做同样的事情。我试过了,但我找不到使用 +=.

增加理解中每个值的方法

这是我的带有 for 循环的代码:

def sum(a):
    results = {"even":0, "odd":0}
    for val in a:
        if val % 2 == 0:
            results["even"] += val
        elif val % 2 != 0:
            results["odd"] += val

这是我使用字典理解的尝试:

def sum(a):
    results = {even:+=x if x % 2 == 0 else "odd" for x in a}

无法有效地单行化。它可以是一行,但是你正在做两次迭代而不是一次:

def sum_odd_even(a):
   return {'odd': sum(x for x in a if x % 2), 'even': sum(x for x in a if x % 2 == 0)}

你最好按照现在的方式去做。也就是说,不要将函数命名为 sum。它是一个内置函数。

你最好循环你现在的状态,因为它只需要一次迭代:

def sum_odd_even(a):
  results = {"even":0, "odd":0}
  for val in a:
    if val % 2 == 0:
      results["even"] += val
    else:
      results["odd"] += val

你不能在 dict 理解范围内 assign/reassign 到 key
一次遍历是无论如何比具有 2 次遍历的潜在单行更好:

更simplified/concise版本:

def sum_odd_even_numbers(lst):
  d = {"even": 0, "odd": 0}
  for val in lst:
      d['even' if val % 2 == 0 else 'odd'] += val
  return d

print(sum_odd_even_numbers([2,4,5,7,8]))   # {'even': 14, 'odd': 12}