python - 是否可以在 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]
有没有更快的解决方案?
解决方案
您可以使用 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")
导致语法错误,但很可能有一些方法可以使用一些我没有想到的库(或其他技巧)来做坏事。为了更好地阅读,我会参考这个问题和第一个答案中的链接。
推荐阅读
- angular - 从 ag-grid 列获取复选框值
- javascript - 当 Typescript 基本上转换为没有接口概念的 Javascript 时,如何在 Angular 中执行生命周期钩子方法?
- php - 在 Centos 7 上安装 PHP 7.2
- android - 如何从 Firebase 实时数据库中检索唯一密钥
- python - TypeError:不支持的操作数类型 *:'builtin_function_or_method' 和 'int'
- javascript - 在什么时候计算 scrollHeight
- excel - `Worksheet_Change` 格式化包含特定字符串的单元格
- c++ - 为什么参数不是常量表达式?
- spring - 是否有任何相当于 CDI view-access-scoped 的 Spring Scope
- python-3.x - 如何使用python从csv中提取带有逗号和/或换行符的列