Python 将3列中的字典值写入文件

Python 将3列中的字典值写入文件,python,python-3.x,Python,Python 3.x,我想将3列中的字典值写入python文件。值的顺序并不重要 我有这本字典,它是: dict_cols = {'1': 'c1', '2': 'c2', '3': 'c3', '4': 'c4', '5': 'c5', '6': 'c6'} 以下代码将所有值写入文本文件: with open("output.txt", "w") as f: for

我想将3列中的字典值写入python文件。值的顺序并不重要

我有这本字典,它是:

dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}
以下代码将所有值写入文本文件:

with open("output.txt", "w") as f:
    for k, v in dict_cols.items():
        f.write(v + ", ")
output.txt
将包含以下内容:

c1, c2, c3, c4, c5, c6, 
我该如何修改代码以将以下内容打印到3列中的
output.txt
,如下所示

c1, c2, c3,
c4, c5, c6

我使用的是python v3.6,对代码的主要修改是在逗号和换行符之间交替使用分隔符。下面是一种通过枚举来跟踪您在序列中的位置的方法:

cols = 3
seps = ' ' * (cols - 1) + '\n'
with open("output.txt", "w") as f:
    for i, (k, v) in enumerate(dict_cols.items()):
        sep = '' if i == len(dict_cols) - 1 else ',' + seps[i % cols]
        f.write(v + sep)

对代码的主要修改是在逗号和换行符之间交替使用分隔符。下面是一种通过枚举来跟踪您在序列中的位置的方法:

cols = 3
seps = ' ' * (cols - 1) + '\n'
with open("output.txt", "w") as f:
    for i, (k, v) in enumerate(dict_cols.items()):
        sep = '' if i == len(dict_cols) - 1 else ',' + seps[i % cols]
        f.write(v + sep)

这与@Mad Physical的答案类似,但它不使用列表来保存行尾(节省内存),它只迭代字典中的值,而不是(未使用的)键和值

dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}

col = 1
with open('tmp.txt', 'w') as fp:
    for i, v in enumerate(dict_cols.values()):
        sep = '' if i == len(dict_cols) - 1 else ','
        fp.write(v + sep)
        if col == 3:
            fp.write('\n')
            col = 0
        col += 1

这与@Mad Physical的答案类似,但它不使用列表来保存行尾(节省内存),它只迭代字典中的值,而不是(未使用的)键和值

dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}

col = 1
with open('tmp.txt', 'w') as fp:
    for i, v in enumerate(dict_cols.values()):
        sep = '' if i == len(dict_cols) - 1 else ','
        fp.write(v + sep)
        if col == 3:
            fp.write('\n')
            col = 0
        col += 1

这是我的方式,如果我必须诚实的话,我会选择@Ben的答案,因为它的代码更少,效率更高,易读,但这就是它的工作原理。首先,我将列表中的不同值分隔成它们所在的行。然后我取每个值并打印出来

file = "test.txt"
dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}
dict_values = dict_cols.values()
with open (file,"w") as f:
    count = -1
    sep_values = []
    for ind,value in enumerate(dict_values):
        if ind%3 ==0:
            count+=1
            sep_values.append("")
        if ind != len(dict_values)-1:
            end = ", "
        else:
            end = ""
        sep_values[count] += value+end
    for value in sep_values:
        f.write(value+"\n")

这是我的方式,如果我必须诚实的话,我会选择@Ben的答案,因为它的代码更少,效率更高,易读,但这就是它的工作原理。首先,我将列表中的不同值分隔成它们所在的行。然后我取每个值并打印出来

file = "test.txt"
dict_cols = {'1': 'c1', 
             '2': 'c2', 
             '3': 'c3', 
             '4': 'c4', 
             '5': 'c5', 
             '6': 'c6'}
dict_values = dict_cols.values()
with open (file,"w") as f:
    count = -1
    sep_values = []
    for ind,value in enumerate(dict_values):
        if ind%3 ==0:
            count+=1
            sep_values.append("")
        if ind != len(dict_values)-1:
            end = ", "
        else:
            end = ""
        sep_values[count] += value+end
    for value in sep_values:
        f.write(value+"\n")

这很不雅观,但效果很好

dict_cols = {'1': 'c1', '2': 'c2', '3': 'c3', '4': 'c4', '5': 'c5', '6': 'c6'}
line_sep = ',\n'

with open("output.txt", "w") as f:
    f.write(', '.join([v for v in dict_cols.values()][:3]) + line_sep + 
            ', '.join([v for v in dict_cols.values()][3:]))

这很不雅观,但效果很好

dict_cols = {'1': 'c1', '2': 'c2', '3': 'c3', '4': 'c4', '5': 'c5', '6': 'c6'}
line_sep = ',\n'

with open("output.txt", "w") as f:
    f.write(', '.join([v for v in dict_cols.values()][:3]) + line_sep + 
            ', '.join([v for v in dict_cols.values()][3:]))

您的输出是如何排序的?这有关系吗?您显示的输出不是由您的代码生成的。排序顺序无关紧要。运行您现有的代码:输出不是您声称的。对不起,让我研究一下代码。您的输出是如何排序的?这有关系吗?而且您显示的输出不是由您的代码生成的。排序顺序无关紧要。运行您现有的代码:输出不是您声称的。对不起,让我研究一下代码。这将如何在列中写入它?似乎它所做的一切都不是在最后一个位置放置逗号。我在任何地方都看不到
\n
,或者我遗漏了什么?Nvm,它是在初始化sep中,很抱歉我没有看到。但这将如何在列中写入它?似乎它所做的一切都不是将逗号放在最后一个位置。我在任何地方都没有看到
\n
,或者我遗漏了什么?Nvm,是在初始化sep中,很抱歉我没有看到。