繁体   English   中英

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

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

我正在创建一个简单的 function ,它接受一个数字列表并返回一个字典,其中包含所有奇数和偶数的总和。

我可以使用传统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)}

你最好按照现在的方式去做。 话虽如此,不要命名 function sum 它是一个内置的 function。

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

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理解中分配/重新分配给
无论如何,单次遍历都比具有 2 次遍历的潜在单行更好:

更简化/简洁的版本:

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM