【问题标题】:python dict in list on for looppython dict在for循环列表中
【发布时间】:2013-05-28 08:41:23
【问题描述】:

我不明白为什么这两个语句不相等。

for item in tree.findAll('item'):
    names = [{
      'id': item.id.string,
      'title': __decodefunction(item.entitle.string)
    }]

它有 1 个项目 但是如果这些陈述

names = [{
    'id': item.id.string,
    'title': __decodefunction(item.entitle.string)
}for item in tree.findAll('item')]

它有 6 个项目。

我想使用第一个循环,但它没有显示正确的项目数。正确的输出是 6 个项目。

【问题讨论】:

    标签: python list loops dictionary


    【解决方案1】:

    他们做的事情非常不同。

    第一个在循环的每次迭代中定义一个新的names 值,替换之前的任何值。每次您创建一个包含 one 字典的新列表时。

    第二个是列表推导式,它构建一个包含 0 个或多个字典的列表,每个字典对应tree.findAll() 返回的每个元素。

    要使第一个等效于第二个,您需要先将names 定义为一个空列表,然后在循环中附加到它:

    names = []
    for item in tree.findAll('item'):
        names.append({
          'id': item.id.string,
          'title': __decodefunction(item.entitle.string)
        })
    

    【讨论】:

      【解决方案2】:

      我明白了

      改成这个

      names = []
      for item in tree.findAll('item'):
          names.extend([{
             'id': item.id.string,
             'title': __decodefunction(item.entitle.string)
          }])
      

      【讨论】:

      • 不需要.extend([]) 部分;您一次只添加一个元素,因此.append() 更有效。
      • 虽然您有两种解决方案,它们的工作原理与其他解决方案类似,但我建议您使用另一种,称为列表理解。对我来说,它看起来更方便和 Pythonic。
      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多