[英]Read a list from a csv row 'as a list' in python using DictReader
[英]Read a list out of a csv by python DictReader
我的CSV文件如下所示:
YY,XX,ZZ
[14, 18, 13, 0],"[7, 7, 9, 9]",[]
现在我使用dictread这样:
csv_file = csv.DictReader(open(test_file, 'r'), delimiter=',', quotechar='"')
for line in csv_file:
a=line
现在我得到:
print(a)
>> {'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
print(a["XX"])
>> [7, 7, 9, 9]
b=a["XX"]
print(b[0])
>> [
我想将csv中的元素作为字典读入,但值应包含在列表中,因此我得到的是7而不是[:
print(a)
>> {'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
print(a["XX"])
>> [7, 7, 9, 9]
b=a["XX"]
print(b[0])
>> 7 <----
我怎么做?
你快到了。
您有看起来像列表的字符串,但是它们是字符串。 只需通过astliteral_eval过滤字典中的字符串元素,以将其解析回Python列表中即可:
>>> di={'XX': '[7, 7, 9, 9 ]', 'YY': '[14, 18, 13, 0 ]', 'ZZ': '[]'}
>>> import ast
>>> for k in di:
... di[k]=ast.literal_eval(di[k])
...
>>> di
{'YY': [14, 18, 13, 0], 'XX': [7, 7, 9, 9], 'ZZ': []}
import ast
csv_file = csv.DictReader(open(test_file, 'r'), delimiter=',', quotechar='"')
def proc_line(line):
keys,vals = zip(*line.items())
return dict(zip(keys,map(ast.literal_eval,vals)) )
for line in map(proc_line,csv_file):
keys,vals = zip(line.items())
a=dict(zip(keys,map(ast.literal_eval,vals)) )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.