将列表字典写入python中以制表符分隔的文件,字典键值作为不带Pandas的列

2024-04-24 10:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的字典是:

dict={'item': [1,2,3], 'id':['a','b','c'], 'car':['sedan','truck','moped'], 'color': ['r','b','g'], 'speed': [2,4,10]}

我正在尝试生成一个以out为分隔符的制表符,如下所示:

item    id
1       a
2       b
3       c

我写的代码是:

with open('file.txt', 'w') as tab_file:
    dict_writer = DictWriter(tab_file, dict.keys(), delimiter = '\t')
    dict_writer.writeheader()
    dict_writer.writerows(dict)

具体来说,我正在努力以基于列的方式写入文件。也就是说,字典键填充为标题,字典值垂直填充在相关标题下。而且,我没有使用熊猫的奢侈


Tags: id标题字典outitemcartabdict
3条回答

您可以使用带有zip的简单循环:

d={'item': [1,2,3], 'id':["a","b","c"]}

print('item\tid')
for num, letter in zip(d['item'], d['id']):
    print('\t'.join(str(num) + letter))

item    id
1       a
2       b
3       c

编辑:
如果不想硬编码列名,可以使用以下方法:

d={'item': [1,2,3], 'id':["a","b","c"]}

print('\t'.join(d.keys()))
for num, letter in zip(*d.values()):
    print('\t'.join(str(num) + letter))

但是,只有在使用字典时python3.7+才能保证列的顺序。如果您有较低的python版本,请使用orderedDict,如下所示:

from collections import OrderedDict

d=OrderedDict({'item': [1,2,3], 'id':["a","b","c"]})

print('\t'.join(d.keys()))
for num, letter in zip(*d.values()):
    print('\t'.join(str(num) + letter))

此解决方案适用于dict中数量不明确的项目和子项目:

d = {'item': [1, 2, 3], 'id': [4, 5, 6]}

for i in d:
    print(i + "\t", end="")
    numSubItems = len(d[i])
print()


for level in range(numSubItems):
    for i in d:
        print(str(d[i][level]) + "\t", end="")
    print()



编辑: 要通过写入文本文件来实现这一点,请执行以下操作:

d = {'item': [1, 2, 3], 'id': [4, 5, 6], 'test': [6, 7, 8]}


with open('file.txt', 'w') as f:
    for i in d:
        f.write(i + "\t")
        numSubItems = len(d[i])
    f.write("\n")

    for level in range(numSubItems):
        for i in d:
            f.write(str(d[i][level]) + "\t")
        f.write("\n")

下面是一种使用一次性函数和zip实现此目的的方法:

d = {
    'item': [1, 2, 3],
    'id': ['a', 'b', 'c'],
    'car': ['sedan', 'truck', 'moped'],
    'color': ['r', 'b', 'g'],
    'speed': [2, 4, 10],
    }

def row_printer(row):
    print(*row, sep='\t')

row_printer(d.keys())  # Print header
for t in zip(*d.values()):  # Print rows
    row_printer(t)

要打印到文件:print(..., file='file.txt')

相关问题 更多 >