首页 > 解决方案 > 是否可以在 for 循环(python)中初始化数组变量?

问题描述

场景:字典包含许多我想要提取的列表。伪代码:例如

Dict = {'a':[1,2,3], 'b':[2,3,4], 'c':[4,5,6]}

结果,我想创建一个以 for 循环中的键命名的数组。可能吗?我想a = [1,2,3], b = [2,3,4], c=[4, 5, 6]不必键入 a = []、b = []、c = [] 并单独附加它们,无论如何在 for 循环中自动执行此操作?

结果:

a = [1,2,3]
b = [2,3,4]
c = [4,5,6]

我目前的解决方案:创建一个类

class Container:
     def __init__(self):
         self.k = []
result = [Container() for i in range(4)]
for i,k in enumerate(Dict.keys()):
    result[i] = Dict[k]

有没有更快的解决方案?

标签: pythonarraysnumpydictionary

解决方案


您可以使用 exec,但请注意,这可能存在安全风险,不推荐:

Dict = {'a':[1,2,3], 'b':[2,3,4], 'c':[4,5,6]}

for k,v in Dict.items():
    exec(k+" = v")

编辑:

安全风险基本上是有人将代码放入Dict并试图执行它。您可以进行的无害测试是添加d:os.getcwd()Dict,希望程序已经导入os,然后您稍后将d在您的工作目录中拥有一个变量。例如,您可以使用类似的东西来读取文件内容并将它们发送给其他人。更恶意的用户可能会尝试执行从硬盘中删除某些文件或安装木马等的代码。老实说,我并没有设法做真正恶意的事情,而只是短暂尝试,因为天真地做一些事情,比如d:import os; print("Hello world")导致语法错误,但很可能有一些方法可以使用一些我没有想到的库(或其他技巧)来做坏事。为了更好地阅读,我会参考这个问题和第一个答案中的链接。


推荐阅读