【问题标题】:Python Multiple Values For One Key in a defaultdict(dict)默认dict(dict)中一个键的Python多个值
【发布时间】:2017-05-12 23:18:56
【问题描述】:

我正在尝试使用默认字典创建具有可选边权重的有向图。这是我的程序:

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,但我找不到任何地方谈论如何以我想要的方式填充它。感谢您的帮助。

【问题讨论】:

  • myDefaultDict = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in myGraphLines} 忽略并丢弃您之前构建的 defaultdict。
  • 是的,我觉得就是这样,哈哈,我在哪里可以找到如何使用 defaultdict?

标签: python dictionary input graph collections


【解决方案1】:

当您使用默认字典时,您几乎总是需要使用显式循环来填充它:

myDefaultDict = collections.defaultdict(dict)
for e in myGraphLines:
    myDefaultDict[e[0]][e[1]] = e[2] if len(e) == 3 else True

这是一种最初感觉应该有一些巧妙的方式来使用某种 dict 理解或其他东西的东西。但是,即使您可以使用推导式,它通常也是二次时间或者您根本不需要 defaultdict 的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多