当一个人不使用方法时,什么是最好的,实现以下的方法。
- 具有将项目添加到字典的单个功能
- 向字典添加多个项目时使用该功能
- 这会让一切都变得超级慢吗?
以下作品,我对使用它不是很认真,但对可能的事情很感兴趣。
创建和更新字典的简单函数。
from collections import defaultdict
from functools import partial
def addfoo(mydict, foo):
x,y,z = foo
mydict[x].add((y,z))
mydict[y].add((x,z))
return mydict
makemydict = partial(addfoo, defaultdict(set))
foo = ('foo','bar',1)
mydict = makemydict(foo)
print(mydict)
# defaultdict(<class 'set'>, {'foo': {('bar', 1)}, 'bar': {('foo', 1)}})
虽然下一部分有效,但我想知道是否有一种方法可以使用 map 来在“foos”(复数)上运行该函数。但是由于 addfoo 函数返回一个值,它怎么能被映射。以下工作,但还有其他方法吗?
def addfoos(mydict, foos):
for foo in foos:
mydict = addfoo(mydict,foo)
return mydict
makemany = partial(addfoos, defaultdict(set))
foos = { ('foo','bar',1),
('bar','baz',0) }
mydict = makemany(foos)
print(mydict)
# defaultdict(<class 'set'>, {'baz': {('bar', 0)}, 'foo': {('bar', 1)}, 'bar': {('foo', 1), ('baz', 0)}})
事实上,它可以工作......但我很好奇python是否有 fmap 或类似的。
好的......对于任何偶然发现这一点的人——使用reduce!
以下,虽然有不同的变量正是我的目标:
from collections import defaultdict
from functools import partial
from functools import reduce
def addnode(graph, node):
x,y,z = node
graph[x].add((y,z))
graph[y].add((x,z))
return graph
def addnodes(graph, nodes):
return reduce(addnode, nodes, graph)
graphnode = partial(addnode, defaultdict(set))
graphnodes = partial(addnodes, defaultdict(set))
现在,可以调用函数 (addnode
或addnodes
) 来更新字典。