如何使用字典理解从列表中创建和增加字典中的值
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}
我正在创建一个简单的函数,它接受一个数字列表和 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}