Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典值列表写入文件_Python - Fatal编程技术网

Python 将字典值列表写入文件

Python 将字典值列表写入文件,python,Python,我有一个字典列表,例如: values = [{'Name': 'John Doe', 'Age': 26, 'ID': '1279abc'}, {'Name': 'Jane Smith', 'Age': 35, 'ID': 'bca9721'} ] 我要做的是将此词典列表打印到以制表符分隔的文本文件中,如下所示: Name Age ID John Doe 26 1279abc Jane Smith 35 bca97

我有一个字典列表,例如:

values = [{'Name': 'John Doe', 'Age': 26, 'ID': '1279abc'},
          {'Name': 'Jane Smith', 'Age': 35, 'ID': 'bca9721'}
         ]
我要做的是将此词典列表打印到以制表符分隔的文本文件中,如下所示:

 Name    Age    ID
John Doe    26    1279abc
Jane Smith     35    bca9721
但是,我无法简单地打印值,因为现在我正在通过以下方式打印每行的整个词典:

for i in values: 
    f.write(str(i))
    f.write("\n")
也许我现在需要反复阅读每一本字典?我见过人们使用这样的东西:

for i, n in iterable:
    pass
但我一直不明白这一点。有人能解释一下吗

编辑:

似乎我可以用这样的东西,除非有人有一个更具python风格的方式(也许有人可以解释“对于I,n在interable”?):


这非常简单,可以用一个。它的目的是编写以列分隔的数据,但如果我们将分隔符指定为制表符而不是逗号,则可以很好地完成这项工作

from csv import DictWriter
values = [{'Name': 'John Doe', 'Age': 26, 'ID': '1279abc'},
          {'Name': 'Jane Smith', 'Age': 35, 'ID': 'bca9721'}]
keys = values[0].keys()
with open("new-file.tsv", "w") as f:
    dict_writer = DictWriter(f, keys, delimiter="\t")
    dict_writer.writeheader()
    for value in values:
        dict_writer.writerow(value)

这非常简单,可以用一个。它的目的是编写以列分隔的数据,但如果我们将分隔符指定为制表符而不是逗号,则可以很好地完成这项工作

from csv import DictWriter
values = [{'Name': 'John Doe', 'Age': 26, 'ID': '1279abc'},
          {'Name': 'Jane Smith', 'Age': 35, 'ID': 'bca9721'}]
keys = values[0].keys()
with open("new-file.tsv", "w") as f:
    dict_writer = DictWriter(f, keys, delimiter="\t")
    dict_writer.writeheader()
    for value in values:
        dict_writer.writerow(value)

您可能正在考虑items()方法。这将返回字典中每个条目的键和值


您可能正在考虑items()方法。这将返回字典中每个条目的键和值



你能保证每个字典都有相同的键吗?是的,通过keys=value[0].keys()检索键。你能保证每个字典都有相同的键吗?是的,通过keys=value[0].keys()检索键。为什么
value.get('Name')
而不是
value['Name']
?唯一实际的区别是
get()
如果键不存在,则返回
None
,而索引不存在的键会产生回溯。
None
在这种情况下默认已返回。@TigerhawkT3,抱歉,原意是说returned
'
value.get('Name','')
。我在问题中没有看到任何迹象表明字典会稀疏,因此我认为
get()
而不是
[]
在这里是一个纯粹的风格选择。我只是更习惯于
get()
。为什么
value.get('Name')
而不是
value['Name']
?唯一实际的区别是
get()
如果键不存在,则返回
None
,为不存在的密钥编制索引时会产生回溯。
None
在这种情况下默认已返回。@TigerhawkT3,抱歉的意思是返回
'
value.get('Name','')
。我在问题中没有看到任何迹象表明字典会稀疏,因此我认为
get()
而不是
[]
在这里是一个纯粹的风格选择。我只是更习惯于
get()
。这很有效,但是当在Excel中打开文件时(记事本看起来很不错),每一行都是空白的,你能解释一下吗?因为我在Linux上,我不能保证Excel对这些数据做了什么。但是,我认为您可以将其导入excel并将分隔符指定为制表符。linux使用unix样式的行结尾“\r\n”而不是“\n”。感谢您的解决方案!使用CRLF的是Windows,使用LF的是Unix。这非常有效,但是当在Excel中打开文件时(记事本看起来很棒),每一行都是空白的,你能解释一下吗?因为我在Linux上,我不能保证Excel对这些数据做了什么。但是,我认为您可以将其导入excel并将分隔符指定为制表符。linux使用unix样式的行结尾“\r\n”而不是“\n”。感谢您的解决方案!Windows使用CRLF,Unix使用LF。
from csv import DictWriter
values = [{'Name': 'John Doe', 'Age': 26, 'ID': '1279abc'},
          {'Name': 'Jane Smith', 'Age': 35, 'ID': 'bca9721'}]
keys = values[0].keys()
with open("new-file.tsv", "w") as f:
    dict_writer = DictWriter(f, keys, delimiter="\t")
    dict_writer.writeheader()
    for value in values:
        dict_writer.writerow(value)
for k,v in values.items():
    pass
# assuming your dictionary is in values
import csv
with open('out.txt', 'w') as fout:
    writer = csv.DictWriter(fout, fields=values.keys(). delimiter="\t")
    writer.writeheader()
    writer.writerow(values.values())