我在网上搜索过,但我找不到问题的答案:
我有一个以列表作为元素的字典,每个列表都有不同的长度。例如:
dict_with_lists[value1] = [word1, word2, word3, word4]
dict_with_lists[value2] = [word1, word2, word3]
我的主要问题是,我想将列表元素写入一个应该以制表符分隔的文件中,如果列表已完成,则应将新列表写入新行。
我找到了类似的解决方案:
with open('fname', 'w') as file:
file.writelines('\t'.join(i) + '\n' for i in nested_list)
但它不仅将单词与制表符分开,还将字符分开。
答案 0 :(得分:1)
我认为您正在对字典内的列表进行列表理解。另一种解决方案是
with open('fname', 'w') as file:
for nested_list in dict_with_lists.values():
for word in nested_list:
file.write(word + '\t')
file.write('\n')
\我只是循环遍历字典的值,在这种情况下是列表,并使用制表符连接它们并在每个列表的末尾写一个换行符。我还没有对它进行过测试,但理论上我认为它应该可行。
答案 1 :(得分:0)
如果nested_list
是您的某个字典值,那么您将'\t'.join()
应用于单个字词。您想要加入整个列表:
file.write('\t'.join(nested_list) + '\n')
或者,如果你要遍历字典的值:
file.writelines(
'\t'.join(nested_list) + '\n'
for nested_list in dict_with_lists.values())
以上正确使用file.writelines()
method;传入一个可迭代的字符串来写。如果你传入一个字符串,那么你只会导致Python额外的工作,因为它循环遍历该字符串的所有单个字符以单独写入,之后底层缓冲区必须再将它们组装回更大的字符串。 / p>
但是,这里没有必要重新发明字符分隔值写入轮。使用csv
module,将分隔符设置为'\t'
:
import csv
with open('fname', 'w', newline='') as file:
writer = csv.writer(file, delimiter='\t')
writer.writerows(dict_with_lists.values())
上面将dict_with_lists
词典中的所有列表写入文件。如果您的列表长度不同,csv.writer()
对象并不介意。
答案 2 :(得分:0)
您需要将字典中的每个list
值转换为一系列制表符分隔值,这些值在每个值的末尾都有一个'\n'
换行符:
value1, value2 = 'key1', 'key2'
dict_with_lists = {}
dict_with_lists[value1] = ['word1', 'word2', 'word3', 'word4']
dict_with_lists[value2] = ['word1', 'word2', 'word3']
fname = 'dict_list_values.tsv'
with open(fname, 'w') as file:
file.writelines(
'\t'.join(values)+'\n' for values in dict_with_lists.values()
)
答案 3 :(得分:-1)
我不打算回答您的问题,而是要提示您如何解决实际问题。
还有另一种存储数据的方法(非表格形式的字典),它是以JSON字符串格式保存的。
import json
with open('fname','w') as f:
json.dump(dict_with_lists, f)
然后加载它的代码将是:
import json
with open('fname') as f:
dict_with_lists = json.load(f)