简体   繁体   English

从字典输出csv结构

[英]output a csv structure from a dictionary

I have a data structure that I need to output to a csv file. 我有一个需要输出到csv文件的数据结构。 The keys in the dictionary correspond to A1 - A9 in the first column through I1 - I9 in the ninth column of the csv file. 字典中的键对应于csv文件第9列的第一列中的A1-A9到I1-I9。

Given the data in this format: 给定以下格式的数据:

{'I6': '3', 'H9': '7', 'I2': '7', 'E8': '3', 'H3': '9', 'H7': '4', 'I7': '5', 'I4': '9', 'H5': '2', 'F9': '8', 'G7': '3', 'G6': '1', 'G5': '7', 'E1': '5', 'G3': '6', 'G2': '2', 'G1': '4', 'I1': '8', 'C8': '9', 'I3': '1', 'E5': '6', 'I5': '4', 'C9': '2', 'G9': '9', 'G8': '8', 'A1': '1', 'A3': '5', 'A2': '3', 'A5': '9', 'A4': '2', 'A7': '8', 'A6': '7', 'C3': '4', 'C2': '6', 'C1': '7', 'E6': '4', 'C7': '1', 'C6': '5', 'C5': '8', 'C4': '3', 'I9': '6', 'D8': '4', 'I8': '2', 'E4': '8', 'D9': '5', 'H8': '1', 'F6': '2', 'A9': '4', 'G4': '5', 'A8': '6', 'E7': '2', 'E3': '7', 'F1': '6', 'F2': '4', 'F3': '3', 'F4': '1', 'F5': '5', 'E2': '9', 'F7': '9', 'F8': '7', 'D2': '1', 'H1': '3', 'H6': '8', 'H2': '5', 'H4': '6', 'D3': '8', 'B4': '4', 'B5': '1', 'B6': '6', 'B7': '7', 'E9': '1', 'B1': '9', 'B2': '8', 'B3': '2', 'D6': '9', 'D7': '6', 'D4': '7', 'D5': '3', 'B8': '5', 'B9': '3', 'D1': '2'}

Need to output in this format: 需要以这种格式输出:

A1, B1, C1, D1, E1, F1, G1, H1 
A2, B2, C2, D2, E2, F2, G2, H2 
A3, B3, C3, D3, E3, F3, G3, H3 
A4, B4, C4, D4, E4, F4, G4, H4 
A5, B5, C5, D5, E5, F5, G5, H5 
A6, B6, C6, D6, E6, F6, G6, H6 
A7, B7, C7, D7, E7, F7, G7, H7 
A8, B8, C8, D8, E8, F8, G8, H8 
A9, B9, C9, D9, E9, F9, G9, H9 

Just sort the keys and write using a step of nine from the start to the end. 只需对键进行排序,并从开始到结束使用九个步骤进行书写。

 d = {'I6': '3', 'H9': '7', 'I2': '7', 'E8': '3', 'H3': '9', 'H7': '4', 'I7': '5', 'I4': '9', 'H5': '2', 'F9': '8', 'G7': '3', 'G6': '1', 'G5': '7', 'E1': '5', 'G3': '6', 'G2': '2', 'G1': '4', 'I1': '8', 'C8': '9', 'I3': '1', 'E5': '6', 'I5': '4', 'C9': '2', 'G9': '9', 'G8': '8', 'A1': '1', 'A3': '5', 'A2': '3', 'A5': '9', 'A4': '2', 'A7': '8', 'A6': '7', 'C3': '4', 'C2': '6', 'C1': '7', 'E6': '4', 'C7': '1', 'C6': '5', 'C5': '8', 'C4': '3', 'I9': '6', 'D8': '4', 'I8': '2', 'E4': '8', 'D9': '5', 'H8': '1', 'F6': '2', 'A9': '4', 'G4': '5', 'A8': '6', 'E7': '2', 'E3': '7', 'F1': '6', 'F2': '4', 'F3': '3', 'F4': '1', 'F5': '5', 'E2': '9', 'F7': '9', 'F8': '7', 'D2': '1', 'H1': '3', 'H6': '8', 'H2': '5', 'H4': '6', 'D3': '8', 'B4': '4', 'B5': '1', 'B6': '6', 'B7': '7', 'E9': '1', 'B1': '9', 'B2': '8', 'B3': '2', 'D6': '9', 'D7': '6', 'D4': '7', 'D5': '3', 'B8': '5', 'B9': '3', 'D1': '2'}

import  csv
with open("my.csv","w") as f:
    srt = sorted(d)
    wr = csv.writer(f)
    for i in range(9):
        wr.writerow([d[key] for key in srt[i::9]])

output: 输出:

1,9,7,2,5,6,4,3,8
3,8,6,1,9,4,2,5,7
5,2,4,8,7,3,6,9,1
2,4,3,7,8,1,5,6,9
9,1,8,3,6,5,7,2,4
7,6,5,9,4,2,1,8,3
8,7,1,6,2,9,3,4,5
6,5,9,4,3,7,8,1,2
4,3,2,5,1,8,9,7,6

You can sort with a lambda function using sorted: 您可以使用sorted使用lambda函数进行排序:

d={'I6': '3', 'H9': '7', 'I2': '7', 'E8': '3', 'H3': '9', 'H7': '4', 'I7': '5', 'I4': '9', 'H5': '2', 'F9': '8', 'G7': '3', 'G6': '1', 'G5': '7', 'E1': '5', 'G3': '6', 'G2': '2', 'G1': '4', 'I1': '8', 'C8': '9', 'I3': '1', 'E5': '6', 'I5': '4', 'C9': '2', 'G9': '9', 'G8': '8', 'A1': '1', 'A3': '5', 'A2': '3', 'A5': '9', 'A4': '2', 'A7': '8', 'A6': '7', 'C3': '4', 'C2': '6', 'C1': '7', 'E6': '4', 'C7': '1', 'C6': '5', 'C5': '8', 'C4': '3', 'I9': '6', 'D8': '4', 'I8': '2', 'E4': '8', 'D9': '5', 'H8': '1', 'F6': '2', 'A9': '4', 'G4': '5', 'A8': '6', 'E7': '2', 'E3': '7', 'F1': '6', 'F2': '4', 'F3': '3', 'F4': '1', 'F5': '5', 'E2': '9', 'F7': '9', 'F8': '7', 'D2': '1', 'H1': '3', 'H6': '8', 'H2': '5', 'H4': '6', 'D3': '8', 'B4': '4', 'B5': '1', 'B6': '6', 'B7': '7', 'E9': '1', 'B1': '9', 'B2': '8', 'B3': '2', 'D6': '9', 'D7': '6', 'D4': '7', 'D5': '3', 'B8': '5', 'B9': '3', 'D1': '2'}

sorted_d = sorted(d.items(), key=lambda x: (x[0][1],x[0]))

for x in sorted_d: #keys
    if x[0][0]=="A":
        print "\n"+x[0]+",",
    elif x[0][0]=="I":
        print x[0],
    else:
        print x[0]+",",

for x in sorted_d: #values
    if x[0][0]=="A":
        print "\n"+x[1]+",",
    elif x[0][0]=="I":
        print x[1],
    else:
        print x[1]+",",

Prints out the keys: 打印出键:

A1, B1, C1, D1, E1, F1, G1, H1, I1
A2, B2, C2, D2, E2, F2, G2, H2, I2 
A3, B3, C3, D3, E3, F3, G3, H3, I3 
A4, B4, C4, D4, E4, F4, G4, H4, I4 
A5, B5, C5, D5, E5, F5, G5, H5, I5 
A6, B6, C6, D6, E6, F6, G6, H6, I6 
A7, B7, C7, D7, E7, F7, G7, H7, I7 
A8, B8, C8, D8, E8, F8, G8, H8, I8 
A9, B9, C9, D9, E9, F9, G9, H9, I9 

and the corresponding values: 以及相应的值:

1, 9, 7, 2, 5, 6, 4, 3, 8 
3, 8, 6, 1, 9, 4, 2, 5, 7 
5, 2, 4, 8, 7, 3, 6, 9, 1 
2, 4, 3, 7, 8, 1, 5, 6, 9 
9, 1, 8, 3, 6, 5, 7, 2, 4 
7, 6, 5, 9, 4, 2, 1, 8, 3 
8, 7, 1, 6, 2, 9, 3, 4, 5 
6, 5, 9, 4, 3, 7, 8, 1, 2 
4, 3, 2, 5, 1, 8, 9, 7, 6

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM