メソッドを使用していない場合、次のことを実現するための最良の方法は何ですか。
- 辞書にアイテムを追加するための単一の機能があります
- 辞書に複数の項目を追加するときにその関数を使用する
- これはすべてを非常に遅くしますか?
以下の作品は、あまり真剣に使っていませんが、何ができるのか興味があります。
辞書を作成および更新するための単純な関数。
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)}})
この次の部分は機能しますが、マップを使用して関数を「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などがあるかどうか知りたいです。
OK ...これに遭遇した人のために-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
)を呼び出してdictを更新できます。