【问题标题】:Django: Why 'Class' object is not iterableDjango:为什么“类”对象不可迭代
【发布时间】:2011-01-19 00:01:06
【问题描述】:

我建立了一个这样的字典列表

lst = [{'name': nameobj, Classobj1: "string", Classobj2: "string"}, \
{'name': nameobj, Classobj1: "string", Classobj2: "string"}]

我正在使用

for dic in lst:
   for k,v in dic:   # here is the line has probloem! What it happens?
       #process

错误信息就像“类名”对象不可迭代。

【问题讨论】:

    标签: python django list dictionary


    【解决方案1】:

    遍历字典只是遍历键,而不是键值对。所以就行了

    for k,v in dic:
    

    Python 只获取一个键,例如 Classobj1,并尝试将其解包以匹配元组 k,v。由于 Classobj1 无法迭代,因此无法将其解包以匹配两个项目,这就是您收到此错误的原因。

    要遍历键值对,请使用 items() 或 iteritems():

    for k,v in dic.items():
    

    【讨论】:

      【解决方案2】:

      您需要使用dic.iteritems()

      【讨论】:

      • 谢谢,但是我怎么了~
      • 也对。你知道我们的解决方案之间是否有任何差异,我的意思是速度?谢谢
      • 我只知道初级的python。我不认为有,如果有,它是最小的。
      • keys 和 iteritems 的区别在于返回的是什么。 Keys 将返回一个键数组,其中 iteritems 将返回一个生成元组(键,值)的迭代器。在大多数情况下,最好在循环中使用迭代器,因为它们不会复制数据。
      【解决方案3】:

      尝试使用

      for dic in lst:
          for key in dic.keys():
           /* process dic[key] */
      

      【讨论】:

      • 从贴出的代码看来,他想要key和value,.keys()只会返回key。
      【解决方案4】:

      
      for dic in lst:
         for k,v in dic.iteritems():   # just added a call to iteritems
             #process
      

      你得到' is not iterable'错误,因为dict在迭代它时会产生它的键,所以当你到达Classobj1时,程序期望Classobj1是一个可迭代的对象,它将为k,v 生成值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-22
        • 2021-03-01
        • 2021-05-16
        • 1970-01-01
        • 2018-05-18
        • 2020-04-09
        • 2021-07-04
        相关资源
        最近更新 更多