如何将字符串列表转换为python中的字典列表?

Jua*_*cia 6 python string dictionary list

我有一个格式的字符串:

["('colA':'datA1', 'colB':'datB1', 'colC':'datC1')",
 "('colA':'datA2', 'colB':'datB2', 'colC':'datC2')",
 ..........
 "('colA':'datAn', 'colB':'datBn', 'colC':'datCn')]
Run Code Online (Sandbox Code Playgroud)

我需要获得一个字典:

[{'colA': 'datA1', 'colB': 'datB1', 'colC': 'datC1'},
 {'colA': 'datA2', 'colB': 'datB2', 'colC': 'datC2'},
 ..........
 {'colA': 'datAn', 'colB': 'datBn', 'colC': 'datCn'}]
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我需要使用Python自己的函数或至少不使用循环,但我不知道这是否可行.

Tig*_*kT3 8

用大括号替换括号并使用ast.literal_eval:

import ast
l = ["('colA':'datA1', 'colB':'datB1', 'colC':'datC1')",
 "('colA':'datA2', 'colB':'datB2', 'colC':'datC2')",
 "('colA':'datAn', 'colB':'datBn', 'colC':'datCn')"]
result = [ast.literal_eval('{%s}' % item[1:-1]) for item in l]
Run Code Online (Sandbox Code Playgroud)

结果:

>>> import pprint
>>> pprint.pprint(result)
[{'colA': 'datA1', 'colB': 'datB1', 'colC': 'datC1'},
 {'colA': 'datA2', 'colB': 'datB2', 'colC': 'datC2'},
 {'colA': 'datAn', 'colB': 'datBn', 'colC': 'datCn'}]
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案 - 使用普通的'eval`就像其他建议一样危险.请参见http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html (3认同)

Tig*_*kT3 2

正如 @nexus66 所建议的,这是该答案的更精简版本:

l = ["('colA':'datA1', 'colB':'datB1', 'colC':'datC1')",
 "('colA':'datA2', 'colB':'datB2', 'colC':'datC2')",
 "('colA':'datAn', 'colB':'datBn', 'colC':'datCn')"]
result = [dict(
               item.replace("'", '').split(':')
               for item in s[1:-1].split(', ')
               )
          for s in l]
Run Code Online (Sandbox Code Playgroud)