Python:将元组作为DictWriter的行写入的最干净的方法?

Python:将元组作为DictWriter的行写入的最干净的方法?,python,python-2.7,dictionary,tuples,ordereddictionary,Python,Python 2.7,Dictionary,Tuples,Ordereddictionary,鉴于: 和元组列表,每个元组包含名称、地址和#评论,例如 with open('results.csv', 'wb') as csvfile: fieldnames = ['Name', 'Address', '#Reviews'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow(row) 我试图使用writer.writer

鉴于:

和元组列表,每个元组包含名称、地址和#评论,例如

with open('results.csv', 'wb') as csvfile:
    fieldnames = ['Name', 'Address', '#Reviews']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow(row)
我试图使用
writer.writerow()
将每个元组作为一行写入csv。我可以为每个元组创建一个dict,因此:

[('Name2', 'Main St', 2), ('Name2', 'The Hill', 7), ('Name1', 'The Square', 14)]
但是(i)它很复杂,更重要的是(ii)在dict创建过程中顺序丢失,并且顺序与
字段名的顺序不匹配

我可以使用一个
orderedict()
,但这似乎有点复杂

实现这一目标的更简洁/更短的方法是什么?

您可以使用:

这将创建可传递到
csv.DictWriter
的适当词典:

data = [('Name2', 'Main St', 2), ('Name2', 'The Hill', 7), ('Name1', 'The Square', 14)]
for entry in data:
    row = dict(zip(fieldnames, entry))
    print(row)
>>> fieldnames = ['Name', 'Address', '#Reviews']
>>> for entry in data:
...     row = dict(zip(fieldnames, entry))
...     print(row)
...
{'Name': 'Name2', '#Reviews': 2, 'Address': 'Main St'}
{'Name': 'Name2', '#Reviews': 7, 'Address': 'The Hill'}
{'Name': 'Name1', '#Reviews': 14, 'Address': 'The Square'}

如果您的数据未格式化为
dict
,为什么要使用
DictWriter
?只需使用普通的
csv.writer

data = [('Name2', 'Main St', 2), ('Name2', 'The Hill', 7), ('Name1', 'The Square', 14)]
for entry in data:
    row = dict(zip(fieldnames, entry))
    print(row)
>>> fieldnames = ['Name', 'Address', '#Reviews']
>>> for entry in data:
...     row = dict(zip(fieldnames, entry))
...     print(row)
...
{'Name': 'Name2', '#Reviews': 2, 'Address': 'Main St'}
{'Name': 'Name2', '#Reviews': 7, 'Address': 'The Hill'}
{'Name': 'Name1', '#Reviews': 14, 'Address': 'The Square'}

更简单、更快、更少的代码。

行从何而来?抱歉,行将表示我希望从每个元组/字段名组合中创建的dict是的,但它看起来像什么,如果您有一个iterable,您不需要DictWriteralready@PadraicCunningham是的,很好。这是一个古老的例子,“当你唯一的工具是锤子时,你开始把每个问题都看成钉子。”在这种情况下,我唯一的工具是DictWriter,我以前没有使用过更基本的变体。我想到了zip,但当我将压缩后的数据传递给dict()时,生成的dict的顺序与字段名的顺序匹配