由于数据输入和稍后使用的方式,我目前正在将数据构建到嵌套字典中,但是我希望在此中间步骤中编写可读的“摘要” csv以进行跟踪。据我了解,字典是无序的,但是当我使用这些dictWriter函数时,顺序似乎很重要。
我无法将确切的代码复制到这台计算机上,但这就是我的数据结构的样子
myItems =
{
"Item1":
{
"Col1":"c1.1",
"Col2":"c2.1",
"Col3":"c3.1",
},
"Item2":
{
"Col1":"c1.2",
"Col3":"c3.2",
},
"Item3":
{
"Col1":"c1.3",
"Col4":"c4.3",
"Col5":"c5.3",
},
"Item4":
{
"Col3":"c3.4",
"Col2":"c2.4",
"Col1":"c1.4",
}
}
我希望表格如下所示(不留额外的间距,这样做是为了提高可读性)
Item, Col1, Col2, Col3, Col4, Col5
Item1, c1.1, c2.1, c3.1
Item2, c1.2, , c3.2
Item3, c1.3, , , c4.3, c5.3
Item4, c1.4, c2.4, c3.4
我可以编写一个函数,对字典进行索引,组合已知的标头,将其转换为列表,在不表示键的地方输入空白条目等,但是看来Dictwriter将具有某种形式来容纳这些种类通过针对无序写作而设计。
另外,如果存在这种方式,我将能够在程序的其他地方使用它来打印出可能不共享相同表的SQL数据库条目的摘要。
我对Python还是很陌生,所以我听说这些嵌套词典的功能有多强大,因此,如果我对嵌套词典的功能超卖了,我就怪罪他们的啦啦队长。 = P
答案 0 :(得分:-1)
DictWriter的默认设置是将空白用于缺少的键。如果您遍历所有项目并创建一个词典,该词典是原始文档的副本,并添加了Item
键,那么您将获得所需的结果。还必须指定fieldnames
来提供列写顺序。
import csv
myItems = {'Item1': {'Col1':'c1.1',
'Col2':'c2.1',
'Col3':'c3.1'},
'Item2': {'Col1':'c1.2',
'Col3':'c3.2'},
'Item3': {'Col1':'c1.3',
'Col4':'c4.3',
'Col5':'c5.3'},
'Item4': {'Col3':'c3.4',
'Col2':'c2.4',
'Col1':'c1.4'}}
with open('out.csv','w',newline='',encoding='utf-8-sig') as f:
w = csv.DictWriter(f,fieldnames='Item Col1 Col2 Col3 Col4 Col5'.split())
w.writeheader()
for k,v in myItems.items():
D = v.copy() # So myItems is not modified.
D['Item'] = k
w.writerow(D)
输出:
Item,Col1,Col2,Col3,Col4,Col5
Item1,c1.1,c2.1,c3.1,,
Item2,c1.2,,c3.2,,
Item3,c1.3,,,c4.3,c5.3
Item4,c1.4,c2.4,c3.4,,
请注意,如果将使用Excel读取文件,则utf-8-sig
是最好的编码。尽管在这种情况下仅使用了ASCII兼容字符,但它正确支持Unicode: