首页 > 解决方案 > 如何展平由字符串组成的列表列表?

问题描述

我有一个由包含字符串的列表组成的列表。它看起来像这样:

["['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']",
 "['nft']",
 "['coinvotecc', 'craftnft']",
 "['coinvotecc', 'craftnft']",
 "['fitoken', 'fnk', 'nft', 'bsc', 'bnb']",
 "['nft', 'nft', 'nftarts', 'nftart', 'token', 'opeansea', 'nftcollecting', 'nftbuy', 'nfthorse', 'nftlion', 'nftold', 'nftlionesstiger', 'lion', 'lions']",
 "['nft']",]

我不确定'"'是干什么用的。

我试图通过将其转换为一个大列表来将其展平。我已经尝试了很多不同的方法来做到这一点,但我得到了这样的错误:“浮动对象不可迭代”和“str 没有属性 len()”。

我不确定错误是什么。任何帮助将非常感激。

标签: pythonstringlistdata-science

解决方案


您的列表不包含列表,而是一个字符串。因此,您必须首先将其转换为列表,eval这是最简单的:

the_list = ["['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']"]

eval(the_list[0])

会给你

['eth', 'ethereum', 'nft', 'nonfungibletoken', 'token', 'crypto', 'digitalassets', 'etf', 'digitalcoin', 'ewallet', 'digitalgold', 'internetmoney', 'defi', 'decentralizedfinance', 'peertopeer', 'digitalcurrency', 'decentralizedmoney']

编辑:如果您有多个字符串(根据您的编辑),您可以这样做

[eval(item) for item in the_list]

编辑2:如果某些元素不是字符串(根据您随后的评论),您可以使用它(我包括了一种扁平化的方法):

def eval_or_keep(element):
    return eval(element) if isinstance(element, str) else [element]


list_of_lists = [eval_or_keep(item) for item in the_list]

flattened_list = [item 
                  for sub_list in list_of_lists 
                  for item in sub_list]

推荐阅读