我正在尝试使用defaultdict创建一个带有可选边权重的有向图。这是我的计划:
import sys
import collections
myGraphLines = sys.stdin.readlines()
myGraphLines = [i.split() for i in myGraphLines]
myDefaultDict = collections.defaultdict(dict)
print(myDefaultDict)
myDefaultDict = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in myGraphLines}
print(myDefaultDict)
当我跑步时:
SanFrancisco Houston 1000
Austin Houston 500
NYC LA 3000
LA SanFrancisco
LA Ames 300
LA Detroit 200
^D
defaultdict(<class 'dict'>, {})
{'NYC': {'LA': '3000'}, 'LA': {'Detroit': '200'}, 'SanFrancisco': {'Houston': '1000'}, 'Austin': {'Houston': '500'}}
但如果我要创建有向图,我需要'LA'
指向'SanFrancisco', 'Ames',
和'Detroit'
但它只指向底特律。
我觉得我根本没有使用defaultdict,但我找不到任何谈论如何以我想要的方式填充它的地方。谢谢你的帮助。
答案 0 :(得分:3)
当您使用defaultdict时,您几乎总是需要使用显式循环填充它:
myDefaultDict = collections.defaultdict(dict)
for e in myGraphLines:
myDefaultDict[e[0]][e[1]] = e[2] if len(e) == 3 else True
这种情况最初感觉应该有一些漂亮的方式来使用某种词典理解或其他东西。但是,即使你可以使用理解,它通常是二次时或者你根本不需要默认的情况。