【问题标题】:creating nested dicts in python 3在 python 3 中创建嵌套字典
【发布时间】:2016-08-27 09:59:42
【问题描述】:

我正在尝试使用以下代码创建以下嵌套 dict 结构 {0: {0: 1}, 1: {0: 1, 1: 1}}

feats = {}
for i in range(2):
    feat = feats.get(i, {})
    for j in range(i+1):
        feat[j] = 1

但我得到的只是feats = {}。这是为什么?谢谢。

【问题讨论】:

  • { i:{j:1 for j in range(0,i+1)} for i in range(2)}

标签: python python-3.x dictionary


【解决方案1】:

这里的问题是,您没有将feat 值存储在feats 中,因此每次迭代后它都会丢失。在迭代结束时,feats 为空。

你可以像下面这样修复你的代码:

feats = {}
for i in range(2):
    feat = feats.get(i, {})
    for j in range(i+1):
        feat[j] = 1
    feats[i] = feat

print(feats)

输出:

{0: {0: 1}, 1: {0: 1, 1: 1}}

【讨论】:

  • 需要 Python 3 打印:print(feats)?
  • 谢谢@Hanshan,现在修好了。
  • 您每次都在完美地评估feat,但您没有将feat 的值存储到feats 中。所以,当你完成后,feats 仍然是空的。为了更好地理解它,您可以考虑在每次迭代后打印featfeats 的值。
  • 但是feat 是对feats 中的值的引用,所以它应该会自动更新,不是吗?
  • 不,feat 是新字典,不是参考。您可以通过以下方式查看:print(feat is feats)
【解决方案2】:

首先,我运行了您的程序并打印了专长,它打印的是 {0: 1, 1: 1} 而不是 {}

第二件事,我可以从您的要求中理解的是,以一般的方式,在遍历一系列数字时,您希望将该数字作为键和值作为包含键值对的字典,其中键的数量从 0 到那个数字,值为 1。如果我错了,请纠正我。

所以正确的程序是:

feats = {} 
for i in range(2): 
   feats[i] = feats.get(i, {}) 
   for j in range(0,i+1): 
      feats[i][j] = 1
print feats 

您可以将 2 替换为范围内的任意数字并得到相应的答案。

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多