Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我需要打印具有不同字段的不同词典,ValueError:dict包含字段名称中没有的字段:_Python_Csv_Dictionary - Fatal编程技术网

Python 我需要打印具有不同字段的不同词典,ValueError:dict包含字段名称中没有的字段:

Python 我需要打印具有不同字段的不同词典,ValueError:dict包含字段名称中没有的字段:,python,csv,dictionary,Python,Csv,Dictionary,我有4本字典,其中一些字段并没有出现在所有的4本字典中。我得到这个错误 ValueError:dict包含的字段不在字段名中:“发件人”、“命令” 阅读一些文档后,我发现DictWriter的extraction='ignore'参数,但它在CSV文件中遗漏了一些字段。 我需要CSV文件中的所有字段,即使某些词典中的字段为空。据我所知,它只是打印公共字段 字典包括: {'Command':'DELETE','table':'abc','from':'abc','where_expr':'c=bo

我有4本字典,其中一些字段并没有出现在所有的4本字典中。我得到这个错误

ValueError:dict包含的字段不在字段名中:“发件人”、“命令”

阅读一些文档后,我发现DictWriter的extraction='ignore'参数,但它在CSV文件中遗漏了一些字段。 我需要CSV文件中的所有字段,即使某些词典中的字段为空。据我所知,它只是打印公共字段

字典包括:

{'Command':'DELETE','table':'abc','from':'abc','where_expr':'c=book'}

{'Command':'SELECT','columns':'ab','tab1','from':'tab1'}

{'Command':'INSERT','table':'xyz','into':'xyz','columns':'pencil pens','values':'200 20'}

{'Command':'UPDATE','table':'Student','columns':'NAME','values':'PRATIK','where_expr':'a=100'}

由于这个错误,我已经包括了引渡

with open('del.csv', 'w') as f:  
    write = csv.DictWriter(f, dict4.keys(),extrasaction='ignore') 
    write.writeheader()
    write.writerow(dict5)
    write.writerow(dict6)
    write.writerow(dict7)
    write.writerow(dict8)
输出如下所示: (我用逗号分隔字段。空格表示空字段(它们没有值))

表|列|值|其中| expr

abc,c=书本

表1,a和b

xyz,铅笔笔,200-20

学生,姓名,PRATIK,a=100

编辑:所需输出为: (空格表示空字段)我希望我能发布CSV文件

命令|表|列|从| Where | expr |转换为|值

删除,abc,abc,c=账簿

选择,选项卡1,a b,选项卡1

插入件,xyz,铅笔笔,xyz,200 20

更新,学生,姓名,a=100,PRATIK


您可以使用pandas数据框加载列表中的所有词典,并从该数据框生成csv文件。试试这个:

import pandas as pd
d1 = {'Command': 'DELETE', 'table': 'abc', 'from': 'abc', 'where_expr': 'c = book'}
d2 = {'Command': 'SELECT', 'columns': 'a b', 'table': 'tab1', 'from': 'tab1'}
d3 = {'Command': 'INSERT', 'table': 'xyz', 'into': 'xyz', 'columns': 'pencil pens', 'values': '200 20'}
d4 = {'Command': 'UPDATE', 'table': 'Student', 'columns': 'NAME', 'values': 'PRATIK', 'where_expr': 'a = 100'}
d = [d1, d2, d3, d4]
d2 = []
col = ['Command', 'table', 'columns', 'from', 'where_expr', 'into', 'values']
for i in d:
    temp = {}
    for c in col:
        if c in i:
            temp[c] = i[c]
        else:
            temp[c] = ''
    d2.append(temp)
df2 = pd.DataFrame(d2, columns=col)
df2.columns = [c.capitalize() for c in col]
df2.to_csv('test21.csv', index=False, sep=',')
输出(csv文件内容):

带操作(对于具有动态列数的情况):


names.csv
内容:

Command,columns,from,into,table,values,where_expr
DELETE,,abc,,abc,,c = book
SELECT,a b,tab1,,tab1,,
INSERT,pencil pens,,xyz,xyz,200 20,
UPDATE,NAME,,,Student,PRATIK,a = 100

发布所需的输出Posted it@RomanPerekhrest我们可以再要一个字段顺序吗?是的,顺序不是问题,这正是我想要的!你能解释一下columns=col在DataFrame()中的第二个参数是什么吗?什么是index=False。我刚开始学习Pandas,@shaikhafizunisa如果你
print(df2)
最左边会有行名,通常是
0,1,2,3..
。为了不写这些行名,我们设置了
index=False
。参数
columns=col
表示,在创建此数据帧时,仅使用
col
列表作为数据帧列中的标题。看一看,我所要做的就是手动给出一些字段名,然后对其余字段执行union。谢谢@Shaikhafizunisa,不,不是手动的
initial_fieldnames
是您的
dict4
键的指针。因为您没有发布
dict4
。用您的
dict4.keys()替换
initial_fieldnames
import csv

dict5 = {'Command': 'DELETE', 'table': 'abc', 'from': 'abc', 'where_expr': 'c = book'}
dict6 = {'Command': 'SELECT', 'columns': 'a b', 'table': 'tab1', 'from': 'tab1'}
dict7 = {'Command': 'INSERT', 'table': 'xyz', 'into': 'xyz', 'columns': 'pencil pens', 'values': '200 20'}
dict8 = {'Command': 'UPDATE', 'table': 'Student', 'columns': 'NAME', 'values': 'PRATIK', 'where_expr': 'a = 100'}

with open('names.csv', 'w', newline='') as csvfile:
    # `initial_fieldnames` are your dict4 keys
    initial_fieldnames = ["table", "columns", "values", "where_expr"]
    fieldnames = sorted(set(initial_fieldnames).union(*[dict5, dict6, dict7, dict8]))
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore')

    writer.writeheader()
    writer.writerows([dict5, dict6, dict7, dict8])
Command,columns,from,into,table,values,where_expr
DELETE,,abc,,abc,,c = book
SELECT,a b,tab1,,tab1,,
INSERT,pencil pens,,xyz,xyz,200 20,
UPDATE,NAME,,,Student,PRATIK,a = 100