为什么使用 .items() 允许我遍历 defaultdict 否则变量读取错误?

问题描述

当尝试遍历 defaultdict 时,我的变量在应该作为列表读取时被读取为字符串,但是,当我稍微更改代码时,它起作用了,但我不知道确切原因。我的 defaultdict 是一个字典,里面有一个字典列表。代码看起来像这样

for engagement in engagement_by_account:
 for engagement in engagement:
    engagement['total_minutes_visited'] = float(engagement['total_minutes_visited'])

错误是:

TypeError: string indices must be integers

然而,当我把代码改成这样:

for key,engagement in engagement_by_account.items():
 for engagement in engagement:
    engagement['total_minutes_visited'] = float(engagement['total_minutes_visited'])

没有错误了。

解决方法

默认情况下,当您遍历字典(或 defaultdict)时,您将遍历该字典的 。在这里您似乎想迭代这些值,以便您可以执行您所做的操作或类似的操作:

for engagements in engagement_by_account.values():
  for engagement in engagements:
    engagement['total_minutes_visited'] = float(engagement['total_minutes_visited'])