【问题标题】:Read a list out of a csv by python DictReader通过 python DictReader 从 csv 中读取列表
【发布时间】:2014-07-29 18:42:36
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: python csv python-3.x


    【解决方案1】:

    你快到了。

    您的字符串看起来像列表,但它们是字符串。只需通过ast literal_eval过滤dict中的字符串元素,将其解析回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': []}
    

    【讨论】:

    • 非常感谢,尤其是解释。我用 str.split() 方法尝试过,但结果很糟糕。非常感谢!!
    【解决方案2】:
    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)) )
    

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2018-04-17
      • 1970-01-01
      • 2019-09-14
      • 2011-12-14
      • 1970-01-01
      • 2015-12-24
      • 2020-10-19
      • 2017-03-11
      相关资源
      最近更新 更多