将列表的名称(str)列表转换为python中的列表列表

时间:2018-03-17 17:06:46

标签: python

我是python的新手,我已经搜索了很多关于这个问题的内容。我知道有一种方法可以将元组转换为列表,但不知何故它对我不起作用。这是我的问题。

说我有:

l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']

然后说我有另一个清单:

l_all = ['l_1','l_2','l_3']

如何将它(l_all)转换为

列表
[['a','b','c'],['e','f','g'],['g','h','i']]

我使用ast.literal_eval尝试了ast包,但是收到了这个错误:

  

ValueError:格式错误的节点或字符串:< _ast.Name object at   0x00000172CA3C5278>

我也尝试过使用json包,但仍然没有运气。

我尝试输出ast.literal_eval('l_1'),但没有工作。

如果有人可以提供帮助,我真的很感激。

非常感谢!

6 个答案:

答案 0 :(得分:3)

这听起来像是一个应该在上游修复的问题

ast.literal_eval评估文字eval只是1)作弊和2)如此危险我根本不会推荐它。

无论如何,您可以使用global& amp;扫描全局然后局部变量。列表理解中的本地词汇:

l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']

l_all = [globals().get(x,locals().get(x)) for x in l_all]

结果:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]

globals().get(x,locals().get(x))是一个快速的&脏代码首先看全球变量&如果找不到,则回退到本地变量。它可能会因您的需求而过于复杂。

答案 1 :(得分:2)

您可以使用字典存储列表名称和每个关联列表:

d = {'l_2': ['e', 'f', 'g'], 'l_3': ['g', 'h', 'i'], 'l_1': ['a', 'b', 'c']}
l_all = ['l_1','l_2','l_3']
final_results = [d[i] for i in l_all]

输出:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]

但是,要通过变量名实际访问列表,您必须使用globals

l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']
new_l = [globals()[i] for i in l_all]

输出:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]

答案 2 :(得分:1)

  

然后说我有另一个清单:

     

l_all = ['l_1','l_2','l_3']

让我们假设您不是使用字符串创建它,并直接使用列表变量

然后,您可以获得所需的输出

l_all = [l_1,l_2, l_3]

答案 3 :(得分:1)

您可以这样做:

l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']
l_all = ['l_1','l_2','l_3']

print(list(map(lambda x:globals()[x],l_all)))

输出:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]

答案 4 :(得分:0)

您可以使用locals()

l_1 = ['a','b','c']
l_2 = ['e','f','g']
l_3 = ['g','h','i']

l_all = ['l_1', 'l_2', 'l_3']

all_local_variables = locals()
l_all_values = [all_local_variables[i] for i in l_all]

并且您应该知道,如果当前范围中没有此类变量,您可以获得KeyError,因为您可以all_local_variables.get(i),如果不存在则返回None或设置默认值作为all_local_variables.get(i, 'default')

答案 5 :(得分:0)

最简单的方法是在l_all中评估字符串。像这样的东西

>>> l_1 = ['a','b','c']
>>> l_2 = ['e','f','g']
>>> l_3 = ['g','h','i']
>>> l_all = ['l_1','l_2','l_3']
>>> [ eval(x) for x in l_all ]

输出

[['a', 'b', 'c'], ['e', 'f', 'g'], ['g', 'h', 'i']]