【问题标题】:Python defaultdict list numberingPython defaultdict 列表编号
【发布时间】:2015-02-04 09:33:13
【问题描述】:

我有这段代码,我通过递增循环填充 defaultdict 列表,但问题是输出。我是一个列表,其中包含仅读取而不是枚举位置的值,因为我必须将其写入 CSV 文件。这是填充列表的循环

m = defaultdict(list)
for j in range (0, len(names)):
with open(names[j]) as f:

    reader = csv.reader(f, delimiter=',')
    reader.next()
    for row in reader:
        for (i,v) in enumerate(row):
            columns[i].append(v)
    m[j]=max(columns[1], key=float)

我的问题是这里显示的输出

 (0, '1.8768e-02'), (1, '2.4838e-02'), (2, '3.4145e-02'), (3,  '4.6328e-02'), (4, '5.3245e-02'), (5, '6.0994e-02'), (6, '5.7532e-02'), (7, '6.2890e-02'), (8, '6.6898e-02'), (9, '8.2745e-02'), (10, '5.8015e-02')

如何编辑代码以只允许存储值而不枚举每个文件的最大值?

【问题讨论】:

  • columns 是一个 defaultdict 列表,它读取整列的值并允许程序找到该列的最大值
  • 是m的输出
  • 这是m.items()的输出吗?如果是这样,这是完全正常的!数字12等是key,即j,文件号,不是ienumerate生成的行号。
  • 但是是否可以将其写入 csv 文件而无需同时写入这些数字?因为它似乎并没有只用 writer.writerow(m) 来做到这一点
  • 你为什么要使用defaultdict?看来您可以将m 设为一个普通列表,然后附加到该列表中。另外,请显示更多代码,这样我们就不必猜测了!

标签: python enumerate


【解决方案1】:

不确定我是否完全理解您在那里所做的事情。正如我从您的代码和 cmets 中收集的那样,您正在从 defaultdict m 中的多个 CSV 文件中收集值,然后将这些值写入另一个 CSV 文件。

您似乎使用writer.writerow(m.items()) 来执行此操作。这样,CSV 文件将包含字典中的键,因为这正是 items 返回的内容:字典中所有 (key, value) 对的列表。如果您只想拥有这些值,可以使用m.values()。请注意,不能保证这些值是有序的,但在您的情况下它似乎有效,因为键只是增加数字。为了确保,您可以对项目进行排序并只取值:

writer.writerow([v for (k,v) in sorted(m.items())])

但是,这也意味着您根本不需要字典,更不用说defaultdict。只需使用一个普通的列表来收集这些值并将该列表写入文件。

m = []
# in your read-block:
    m.append(max(columns[1], key=float))
# in your write block:
    writer.writerow(m)

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2012-01-15
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多