使用Python的DictReader读取CSV列表

2 投票
2 回答
866 浏览
提问于 2025-04-18 15:14

我的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 <----

我该怎么做呢?

2 个回答

1

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,特别是当我们不太了解这些工具的工作原理时。

比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期的方式运行。这时候,我们就需要去查找原因,看看是不是有什么地方没有设置对,或者是使用的方法不太正确。

通常,解决这些问题的第一步是仔细阅读相关的文档,了解这个功能的具体用法和注意事项。如果文档不够清晰,我们还可以在网上搜索相关的讨论,看看其他人是怎么解决类似的问题的。

总之,遇到问题时,不要着急,慢慢分析,查找资料,通常都能找到解决办法。

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)) )
3

你快到了。

你现在有一些看起来像列表的字符串,但它们其实是字符串。只需要通过 ast literal_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': []}

撰写回答