列表理解中的无效语法错误

时间:2018-10-29 12:50:27

标签: python

我试图执行下面的代码,但是它抛出一些错误,而在jupyter笔记本上运行的是相同的代码。我不确定出了什么问题。两种平台上的python版本均为2。该代码将json文件作为输入,选择“数据”键并将其下的所有值放入csv文件中。

命令行:

Python版本:2.6.6

$ python Parser.py /data/csdb/stage/fundapiresponse.json /data/csp53/csdb/stage/fundresponse.csv
  File "Parser.py", line 27
    flat_data = [{k:v for j in i for k, v in j.items()} for i in zip(*[element['Data'] for key in element])]
                        ^
SyntaxError: invalid syntax

代码:

#################################################
# importing libraries
#################################################
import csv
import json
import collections
import sys

#################################################
# Reading input and output file from command line
#################################################

infile = sys.argv[1]
outfile = sys.argv[2]

print infile
print outfile

#################################################
# Read JSON and build CSV layout
#################################################
with open(infile,'r') as f:
    data= json.load(f)

with open(outfile, 'w') as f:
    for element in data: 
        flat_data = [{k:v for j in i for k, v in j.items()} for i in zip(*[element['Data'] for key in element])]
        csvwriter = DictWriter(f,flat_data[0].keys(),lineterminator='\n')
        csvwriter.writerows(flat_data)

Jupyter笔记本:

Python 2

#################################################
# importing libraries
#################################################
import csv
import json
import collections
import sys

#################################################
# Reading input and output file from command line
#################################################

infile = 'fundapiresponse.json'
outfile = 'fundresponse.csv'

print infile
print outfile

#################################################
# Read JSON and build CSV layout
#################################################
with open(infile,'r') as f:
    data= json.load(f)

with open(outfile, 'w') as f:
    for element in data: 
        flat_data = [{k:v for j in i for k, v in j.items()} for i in zip(*[element['Data'] for key in element])]
        csvwriter = DictWriter(f,flat_data[0].keys(),lineterminator='\n')
        csvwriter.writerows(flat_data)

1 个答案:

答案 0 :(得分:3)

带有大括号和冒号的

Dict comprehensions (PEP274)仅在Python2.7中引入。在此之前,您必须将dict构造函数与适当的成对列表或生成器一起使用:

dict((k, v) for j in i for k, v in j.iteritems())  # items works, too

另请参阅Alternative to dict comprehension prior to Python 2.7