【问题标题】:I would like to turn a string (that should basically be a list of dictionaries) to a list of dictionaries? [closed]我想把一个字符串(基本上应该是一个字典列表)变成一个字典列表? [关闭]
【发布时间】:2020-12-16 10:29:37
【问题描述】:

我有一个名为 df_imdb 的 DataFrame,它有一个名为 Genres 的列,例如,如果我 检索这样的行之一:

df_imdb.loc[3000,'genres']

答案是:

[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]

这是一个字符串,但我怎样才能将它转换为一个实际的列表呢?

【问题讨论】:

  • 什么是这个字符串的来源,你应该避免处理这个放在首位,但本质上,你想eval 它,如果这是来自不受信任的输入(例如用户输入),则使用 ast.literal_eval
  • 源是 DataFrame 的列之一,它应该包含一些电影的流派。每一行都是一个字典列表。
  • 我不是这个意思。我的意思是为什么会生成这些字符串? "[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]" 不是随机出现的。
  • 不,理解它不是字典列表对您来说非常重要。它是一个字符串。理解这一点非常重要。这是根本问题,有些东西正在创建一个恰好代表字典列表而不是字典列表的字符串。这是你应该解决的根本问题。其他方法只是在其上添加 hack,但如果这是您想要的方式,请再次使用 evalast.literal_eval。但是您应该解决的真正问题是为什么该字符串首先存在
  • 我有一个名为 df_imdb 的 DataFrame,它有一个名为 Genres 的列,例如,如果我检索如下行之一:df_imdb.loc[3000,'genres'],答案将是: "[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': '神秘'} ]",这是一个字符串

标签: python python-3.x string list dictionary


【解决方案1】:
import ast

s = "[{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]"
x = ast.literal_eval(s)

x 将是 [{'id': 53, 'name': 'Thriller'}, {'id': 28, 'name': 'Action'}, {'id': 9648, 'name': 'Mystery'}]
所以打印,例如,x[0]['id'] 将显示53

【讨论】:

  • 这在字符串只包含文字的情况下有效,否则您需要使用eval()
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多