【问题标题】:iterating over values() of dictionary遍历字典的 values()
【发布时间】:2020-09-01 16:42:03
【问题描述】:

我正在尝试使用 for 循环标记字典的每个值,但出现错误:'float' 对象不可迭代。 我的代码是:

for doc, answers in answers.items():
    for answer in answers:
        if doc not in tokenized_answers:
            tokenized_answers[doc] = [tokenize(answer, tokenizer)]
        else:
            tokenized_answers[doc].append(tokenize(answer, tokenizer))

显示错误:for answer in answers

如何遍历 dict.values() 的值?

【问题讨论】:

  • 该错误是由于answers 只是一个值,例如20。你不能迭代这个
  • 如果您可以显示输入字典,那将会很有帮助。该错误消息似乎表明您正在尝试在您的一个 for 循环中迭代浮点数。
  • 当名称answers 已经绑定到dict 时,它可能是个坏主意。从for doc, answer in answers.items(): 开始,去掉内循环,然后从那里开始。
  • 我的输入字典是:{28082: ['dielectric resonator antenna', 'slot Coupled', 'wideband circle polarDESIGN'], 14050: ['Routing', 'Wormhole', 'Intrusion', '检测'、'AnomalyMOBILE']}
  • 错误消息暗示至少一个键的值是浮点数而不是序列/可迭代。

标签: python python-3.x loops dictionary iteration


【解决方案1】:
for doc, something_other_than_answers in answers.items():
   ...

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
【解决方案2】:

看起来您的答案之一不是可迭代以避免错误并且仅在可迭代上运行您可以尝试除了检查 TypeError

 for doc, answers_items in answers.items():
    try: 
        for answer in answers_items:
            if doc not in tokenized_answers:
                tokenized_answers[doc] = [tokenize(answer, tokenizer)]
            else:
                tokenized_answers[doc].append(tokenize(answer, tokenizer))
    except TypeError:
        continue

这将跳过 for 循环中的 answers 值,以防它不是像 float 这样的可迭代对象。

【讨论】:

  • 请注意第一行中answers 标识符的双重使用。
猜你喜欢
  • 2019-09-24
  • 2015-08-07
  • 2013-04-16
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多