根据可迭代项附加到 defaultdict(list)
Append to defaultdict(list) based upon items in an iterable
我有一个程序应该将一个函数应用于一个可迭代对象并且 return
一个字典(列表),其中键是函数的值,列表中的值是从函数产生值的项目。
代码:
from collections import defaultdict
numbers = [1, 4, 5, 6, 8, 19, 34, 55]
d = defaultdict(list)
def modn(n):
return n % 3
def group_by_value(it, func):
result = map(func, it)
for i in result:
for j in it:
d[i].append(j)
return d
print(group_by_value(numbers, modn))
我得到:
{1: [1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55], 2: [1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55], 0: [1, 4, 5, 6, 8, 19, 34, 55]}
我应该得到:
{0: [6], 1: [1, 4, 19, 34, 55], 2: [5, 8]}
我明白为什么我会得到错误的结果。但是,我一直想 运行 modn() 函数两次:一次获取结果,一次进行比较以查看数字中的项目是否已经存在。我忍不住想我不应该 运行 该函数两次,但我被卡住了。
我应该能够将该函数应用于可迭代对象中的每个项目,获取 return 值,然后使用产生该值的可迭代对象中的项目填充列表,而无需 运行调用函数两次。
逻辑分解步骤:
1.Get 函数的结果值
2.Build 一个字典,其中键是结果值,值是 []
3.For 'it' 中的每个值,将其附加到字典中具有其结果值的键
def group_by_value(it, func):
result = list(map(func, it))
d = {i:[] for i in result}
for i in range(len(it)):
d[result[i]].append(it[i])
return d
group_by_value(numbers, modn)
>>>{1: [1, 4, 19, 34, 55], 2: [5, 8], 0: [6]}
我有一个程序应该将一个函数应用于一个可迭代对象并且 return 一个字典(列表),其中键是函数的值,列表中的值是从函数产生值的项目。
代码:
from collections import defaultdict
numbers = [1, 4, 5, 6, 8, 19, 34, 55]
d = defaultdict(list)
def modn(n):
return n % 3
def group_by_value(it, func):
result = map(func, it)
for i in result:
for j in it:
d[i].append(j)
return d
print(group_by_value(numbers, modn))
我得到: {1: [1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55], 2: [1, 4, 5, 6, 8, 19, 34, 55, 1, 4, 5, 6, 8, 19, 34, 55], 0: [1, 4, 5, 6, 8, 19, 34, 55]}
我应该得到:
{0: [6], 1: [1, 4, 19, 34, 55], 2: [5, 8]}
我明白为什么我会得到错误的结果。但是,我一直想 运行 modn() 函数两次:一次获取结果,一次进行比较以查看数字中的项目是否已经存在。我忍不住想我不应该 运行 该函数两次,但我被卡住了。
我应该能够将该函数应用于可迭代对象中的每个项目,获取 return 值,然后使用产生该值的可迭代对象中的项目填充列表,而无需 运行调用函数两次。
逻辑分解步骤:
1.Get 函数的结果值
2.Build 一个字典,其中键是结果值,值是 []
3.For 'it' 中的每个值,将其附加到字典中具有其结果值的键
def group_by_value(it, func):
result = list(map(func, it))
d = {i:[] for i in result}
for i in range(len(it)):
d[result[i]].append(it[i])
return d
group_by_value(numbers, modn)
>>>{1: [1, 4, 19, 34, 55], 2: [5, 8], 0: [6]}