字典到CSV文件:列的顺序

2024-10-04 01:22:17 发布

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

我正在尝试将词典列表导出到.csv文件:

keys = hist[0].keys()
with open(file, 'wt') as output_file:
    dict_writer = csv.DictWriter(output_file, keys, lineterminator='\n')
    dict_writer.writeheader()
    dict_writer.writerows(hist)

我希望字典中的最后一个键成为列中的第一个键。在

我的字典列表(hist)是:

^{pr2}$

我得到了:

for x in dates:
    l = {}
    for y in currs:
        try:
            m = exrates.get_exrates(x)[y]
        except KeyError:
            m = '-'
        l[y] = m
    l['Date'] = x
    hist.append(l)

如何更改字典的顺序或更改列的顺序?在


Tags: 文件csvin列表foroutput字典顺序
3条回答

如果您想要顺序和反转,请使用OrderedDict:

from collections import OrderedDict

for x in dates:
    l = OrderedDict()
    for y in currs:
        try:
            m = exrates.get_exrates(x)[y]
        except KeyError:
            m = '-'
        l[y] = m
    l['Date'] = x
    hist.append(l)

要颠倒顺序,请使用“反转”:

^{pr2}$

如果你只想把最后一把钥匙放在前面:

k = list(hist[0].keys())

keys = keys[-1] +  key[:-1]
print(keys)

您也可以使用dict.get进行理解:

for x in dates:
    l = OrderedDict((y, exrates.get_exrates(x).get(y, "-")) for y in currs)
    l['Date'] = x
    hist.append(l)

如果您要提供页眉,并且不希望在按需写入后排序dict,假设curr是一个列表,则可以使用curr作为页眉添加日期:

import csv

with open(file, 'wt') as output_file:
    wr = csv.writer(output_file)
    wr.writerow(["Date"] + currs)
    for x in dates:
        row = [x] + [exrates.get_exrates(x).get(y, "-") for y in currs]
        wr.writerow(row)

curr中的元素是作为头的键使用的,因此如果您只想将[exrates.get_exrates(x).get(y, "-") for y in currs]的内容与{}一起写入Date下的第一列,就不需要存储dict了。在

用你想要的顺序硬编码标题。在

keys = ['Date', 'RSD', 'GBP']
with open(file, 'wt') as output_file:
    dict_writer = csv.DictWriter(output_file, keys, lineterminator='\n')
    dict_writer.writeheader()
    dict_writer.writerows(hist)

硬编码是首选的任何时候,你希望你的csv有一个特定的格式。在

(如果您不反对使用pandas)您可以通过对列重新排序来完成此操作,请看最后一步:

In [1]: import pandas as pd

In [2]: x = [{'RSD': '-', 'GBP': '0.500409', 'Date': '2008-04-05'}, 
   ...:  {'RSD': '-', 'GBP': '0.500409', 'Date': '2008-04-06'}, 
   ...:  {'RSD': '-', 'GBP': '0.50331', 'Date': '2008-04-07'}, 
   ...:  {'RSD': '-', 'GBP': '0.507939', 'Date': '2008-04-08'},]

In [3]: pd.DataFrame(x)
Out[3]: 
         Date       GBP RSD
0  2008-04-05  0.500409   -
1  2008-04-06  0.500409   -
2  2008-04-07   0.50331   -
3  2008-04-08  0.507939   -

In [4]: y = pd.DataFrame(x)

In [5]: y = y[['RSD', 'GBP', 'Date']]

In [6]: y
Out[6]: 
  RSD       GBP        Date
0   -  0.500409  2008-04-05
1   -  0.500409  2008-04-06
2   -   0.50331  2008-04-07
3   -  0.507939  2008-04-08

相关问题 更多 >