Python:用于循环的CSV Writer Dictionary

时间:2013-12-30 09:04:06

标签: python csv dictionary

这是我的问题:

我有一本字典。

dictionary = {"key1": "value1", "key2": "value2", "key3": value3}

我试图连续编写字典键以及下一行中的相应值。

with open("file.csv") as f:
    datawriter = csv.writer(f)
    for i in dictionary:
        datawriter.writerows([i])
        datawriter.writerows([dictionary[i]])

当我打开csv文件时,键的字母及其对应的值占用不同的单元格。所以它看起来像这样:| k | e | y | 1 |或| v | a | l | u | e |。这不是我想要的。我希望键及其对应的值占用整个单元格,如下所示:| key1 | key2 |或者value1 | value2 |。

我之所以这样做是因为我想格式化csv文件,因此它有两列,一列用于键,另一列用于相应的值。

我已经浏览了Stack,人们已经建议将一个列表放入writer(),我已经完成了,但是当我使用for循环时,这并不起作用。有一个解决方案,说要做writerows([dictionary.keys()]),并在单独的单元格中打印所有键,但是在一行中。我不想要那个。

任何修复?

2 个答案:

答案 0 :(得分:2)

  

我之所以这样做是因为我想格式化csv文件,因此它有两列,一列用于键,另一列用于相应的值。

如果您不关心行在dict中出现的顺序,可以将iteritems传递给writerows来完成。或者是Python 3.x上的items

with open("file.csv") as f:
    datawriter = csv.writer(f)
    datawriter.writerows(dictionary.iteritems())

如果您关心订单,则应该能够sorted使用dictionary.iteritems(),但您可能需要根据所需的排序行为指定自定义排序键功能。

writerows期望一个iterable,其中包含每行要写入的一个条目。每个条目本身应该是可迭代的,为每个要写入的列产生一个条目。由于您希望每个键/值对位于一个单独的行上,因此主要的iterable应该为字典中的每个键/值对产生一个可迭代的值,iteritems就是这样。

您在尝试的解决方案中看到了不受欢迎的行为,因为您正在使用单维列表调用writerows。列表中有一个元素,因此它会写入一行,但主可迭代产生的可迭代是一个简单的字符串。迭代字符串会为您提供每个字符,这就是每个字符出现在单独列中的原因。

答案 1 :(得分:0)

用于将字典写入csv文件,您可以使用字典迭代器。 dict.items()函数返回一个键值对作为元组。 csvwriter.writerow()需要列表/元组。

import csv
dictionary = {"key1": "value1", "key2": "value2", "key3": "value3"}
with open("file.csv","wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    for key, value in dictionary.items():
            csv_writer.writerow([key,value])

csv_file.close()

或者你也可以传递元组。

import csv
dictionary = {"key1": "value1", "key2": "value2", "key3": "value3"}
with open("file.csv","wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    for key_value_tuple in dictionary.items():
            csv_writer.writerow(key_value_tuple)

csv_file.close()