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

Python 如何使用字典理解从列表中创建和增加字典中的值,python,dictionary,increment,dictionary-comprehension,Python,Dictionary,Increment,Dictionary Comprehension,我正在创建一个简单的函数,它获取一个数字列表,并返回一个包含所有奇数和偶数之和的字典 我可以使用传统的for循环来实现这一点,所以我想知道是否有一种方法可以使用字典理解来实现这一点。我试过了,但是我找不到一种方法来使用+=增加理解中的每个值 这是我的代码,带有一个for循环: def sum(a): results = {"even":0, "odd":0} for val in a: if val % 2 == 0: results["e

我正在创建一个简单的函数,它获取一个数字列表,并返回一个包含所有奇数和偶数之和的字典

我可以使用传统的
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 CONTRUSION中分配/重新分配密钥。
一次遍历无论如何比两次遍历的潜在一行要好:

更简化/简洁的版本:

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}

非常感谢你的帮助!我只是想知道有没有办法。根据您的建议,我将使用for-loop版本。非常感谢您的帮助!