【问题标题】:Can't build two dictionaries无法建立两个字典
【发布时间】:2015-07-14 13:39:03
【问题描述】:

我想从同一个 csv 文件构建两个非常相似的字典(一个映射行 [0] 到行 [5],一个从行 [0] 到行 [6]。出于某种原因,我只能构建一个。无论我先运行这两行中的哪一行,字典都存在并且完全按照我的意愿行事。另一行是空的。不知道出了什么问题。

mydict = {row[0]:row[5] for row in csv.reader(g)}
mydict1 = {row[0]:row[6] for row in csv.reader(g)}

我正在使用 python 3,并尝试更改字典名称和其他一些东西。

【问题讨论】:

  • tl;dr 是“python中的文件对象是生成器,需要显式返回文件顶部或重新打开,见链接”
  • 问题是,一旦您迭代了第一个reader,您就到达了文件的末尾,需要倒带或重新打开它。

标签: python dictionary


【解决方案1】:

您不能在不将文件倒回到开头的情况下对文件进行两次迭代。这样做也不是很有效;最好不要在这里使用字典推导:

mydict1, mydict2 = {}, {}
for row in csv.reader(g):
    mydict1[row[0]] = row[5]
    mydict2[row[0]] = row[6]

如果你真的坚持,你可以用file.seek(0)把文件指针放回到开头;您无需在此处重新创建阅读器:

reader = csv.reader(g)
mydict1 = {row[0]:row[5] for row in reader}
g.seek(0)
mydict2 = {row[0]:row[6] for row in reader}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2020-06-28
    • 2017-04-14
    相关资源
    最近更新 更多