【问题标题】:Type casting several dictionaries generated from a loop into a single list键入将从循环生成的多个字典转换为单个列表
【发布时间】:2015-04-02 05:02:29
【问题描述】:

我有一个 for 循环,可以创建几个字典作为输出。我想将所有这些字典捕获到一个列表中。这个怎么做?在下面的示例中,当您打印行时,循环会生成数百个字典。我想将整个 dict 输出封装为一个列表。我的代码在下面,但转储了许多列表和字典。

reader = csv.DictReader(f)
for row in reader:
    print row #for debug
    for key, value in row.iteritems():
        temp=[key,value]
        alist.extend(temp)
        print alist

alist 应该是这样的 [{k,v},{k2,v2},{k3,v3}...]

【问题讨论】:

  • 我看到了两个问题;一是您的代码没有创建任何字典,二是{k,v} 不是有效的字典语法。
  • 这是不正确的,代码正在创建字典,因为 csv.dictreader。自己试试。 f 只是一个 csv 文件,里面有一些列和数据。
  • 如果你想要列表而不是字典,为什么要csv.DictReader 而不仅仅是csv.reader(返回列表)?看来您是在为自己工作。
  • 我想要一个字典列表,如我的 alist 输出所示。
  • 您对字典文字的语法有误。 {k,v} 是一个二元素集,而不是单元素字典。在您想要的输出中,kv 值的来源也不是很清楚。它们都来自 CSV 文件的同一行吗?文件下一行的数据在输出中的外观如何?

标签: python


【解决方案1】:

您只需执行以下操作即可让您的生活更简单:

import csv

with open('somefile.csv') as f:
   reader = csv.DictReader(f)
   rows = list(reader)

rows 将是 csv 文件中所有行的列表,每一行都将表示为一个字典。

【讨论】:

  • 谢谢,正是我所需要的......无法弄清楚如何将字典类型转换为列表。
  • 好吧,要明确一点——这不是它在做什么(即类型转换)。它只是将生成器reader 传递给list() 方法。和rows = [i for i in reader]一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2019-05-05
  • 2023-02-09
  • 1970-01-01
相关资源
最近更新 更多