繁体   English   中英

通过python DictReader从csv中读取列表

[英]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.

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