【问题标题】:Loop to append multiple lists to a single list in Python循环以将多个列表附加到 Python 中的单个列表
【发布时间】:2011-12-15 08:38:34
【问题描述】:

在下面的代码中,row[8], row[9], ..., row[27] 每个都包含许多数字。我需要将 row[8]、row[9] 等中的所有数字作为 stat_by_symbol 中的单独列表附加到 stat_by_symbol。但是,下面的代码将所有数字附加到单个列表中的所有行中。

作为我需要的示例,如果我调用 stat_by_symbol['aaa'][0],那么我应该得到从 row[8] 中提取的数字列表。

我该如何解决这个问题?非常感谢。

编辑以进一步澄清。我附上了csv的快照。我需要 stat_by_symbol['aaa'][0] 给我列 i 下的所有数字。同样,索引为 1 的 stat_by_symbol 会给我列 j 下的所有数字。

stat_by_symbol = {}
with open('zzdata.csv', 'rb') as f:
    reader = csv.reader(f)
    reader.next()
    for row in reader:
        for symbol in symbols:#symbols in a list
            if symbol in row:
                for i in range(8, 28):
                    stat_by_symbol.setdefault(symbol, []).append(row[i])

【问题讨论】:

  • 你确定 row 是一个列表列表吗?
  • @johnjdc - 为什么在with 之后一直取消缩进块?
  • @Vaughn Cato 每一行都是一个列表,而 stat_by_symbol 应该收集所有这些列表。
  • @eumiro 我间隔了四次,然后粘贴了代码。不知道为什么。不过我修好了。
  • @johnjdc - 你说 row[8] 包含许多数字,这意味着 row[8] 是一个列表,这意味着 row 是一个列表列表。我认为您正在以两种不同的方式考虑变量“行”。

标签: python list loops


【解决方案1】:
stat_by_symbol = dict((symbol, [[] for i in xrange(8,28)]) for symbol in symbols)
with open('zzdata.csv', 'rb') as f:
    reader = csv.reader(f)
    reader.next()
    for row in reader:
        for symbol, symbol_list in stat_by_symbol.iteritems():
            if symbol in row:
                for symbol_list2, cell in zip(symbol_list, row[8:28]):
                    symbol_list2.append(cell)

【讨论】:

  • 当我尝试运行第一行时出现错误:“stat_by_symbol = dict((symbol, [[] for i in xrange(8,28)]) for symbol in symbols)” I修复了括号,但 Python 还在第一行突出显示了 for。
猜你喜欢
  • 2017-03-22
  • 2023-01-07
  • 2021-10-31
  • 2018-05-12
  • 2020-07-23
  • 2022-01-04
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多