在 python 嵌套字典中计数 | fromkeys() 函数它是如何工作的?

给定一个达到最大达到阶段的运行列表,我想将最大值传输到一个嵌套字典,其中包含 每个阶段的 尝试次数 (t)

这意味着运行 3、4 和 7 应该会产生:

{0: {'t': 3},1: {'t': 3},2: {'t': 3},3: {'t': 2},4: {'t': 1},5: {'t': 1},6: {'t': 1}}

第 0、1、2 阶段各进行了 3 次,第 3 阶段进行了 2 次,第 4、5 和 6 阶段仅进行了一次。

  • 我得到以下结果:

    {0: {'t': 14},1: {'t': 14},2: {'t': 14},3: {'t': 14},4: {'t': 14},5: {'t': 14},6: {'t': 14}}
    

源代码

p = {}
p = dict.fromkeys(range(7),{})

runs = (3,4,7)

for r in runs:
    for l in range(r):
        if "t" in p[l]:
          p[l]["t"] += 1
        else:
          p[l]["t"] = 1

为什么所有字典的键值都一样?

wqqweqe 回答:在 python 嵌套字典中计数 | fromkeys() 函数它是如何工作的?

那是因为 dict.fromkeys() 为 p 中的每个键设置了相同的对象

尝试做类似的事情

p = { i : {} for i in range(7) }

runs = (3,4,7)

for r in runs:
    for l in range(r):
        if "t" in p[l]:
          p[l]["t"] += 1
        else:
          p[l]["t"] = 1
,
  • 使用 Dict Comprehension

     p = {n:{} for n in range(7)}
      runs = (3,7)
    
      for r in runs:
          for l in range(r):
              if "t" in p[l]:
                  p[l]["t"] += 1
              else:
                  p[l]["t"] = 1
      print(p)
    

fromkeys() 是一个返回新字典的类方法。值默认为无。

所有的值都只引用一个实例,所以通常将值作为一个可变对象(例如空列表)是没有意义的

要获得不同的值,请改用 dict comprehension


编辑

值得一提:

  • 使用setdefault Method

     for r in runs:
              for l in range(r):
                  if "t" in p[l]:
                      p[l]['t'] += 1
                  else:
                      p[l].setdefault('t',1)
    
  • 预先构建带有键“t”的字典。

      p = {n: {'t': 0} for n in range(7)}
      runs = (3,7)
    
      for l in range(len(runs)):
          for run in range(runs[l]):
              p[run]['t'] += 1
    
本文链接:https://www.f2er.com/1216302.html

大家都在问