Is it possible to convert a variable as a string?
本问题已经有最佳答案,请猛点这里访问。
我有一个列表,我想把它转换成一本字典。
1 2 3 4 5 6 7 8 9 10 | L = [ is_text, is_archive, is_hidden, is_system_file, is_xhtml, is_audio, is_video, is_unrecognised ] |
有什么办法可以做到这一点吗?我可以通过程序转换成这样的词典吗?
1 2 3 4 5 6 7 8 9 10 | { "is_text": is_text, "is_archive": is_archive, "is_hidden" : is_hidden "is_system_file": is_system_file "is_xhtml": is_xhtml, "is_audio": is_audio, "is_video": is_video, "is_unrecognised": is_unrecognised } |
号
变量在这里是布尔值。
这样我就可以很容易地把这本字典传给我的函数
1 2 3 | def updateFileAttributes(self, file_attributes): m = models.FileAttributes(**file_attributes) m.save() |
将变量放入列表后,无法获取该变量的名称,但可以执行以下操作:
1 2 3 4 | In [211]: is_text = True In [212]: d = dict(is_text=is_text) Out[212]: {'is_text': True} |
注意,存储在
在您的例子中,您不必使
1 2 3 | def updateFileAttributes(self, **file_attributes): m = models.FileAttributes(**file_attributes) m.save() |
号
然后您可以这样调用函数:
1 | yourObj.updateFileAttributes(is_text=True, ...) |
我在这里很少做假设来得出这个结果。列表中的变量是作用域中唯一可用的bool变量。
1 | { x:eval(x) for x in dir() if type(eval(x)) is bool } |
。
或者,如果对变量强制使用了命名约定
1 | { x:eval(x) for x in dir() if x.startswith('is_') } |
。
以下代码工作。
用于变量到字符串
1 2 3 4 5 6 7 8 | >>> a = 10 >>> b =20 >>> c = 30 >>> lst = [a,b,c] >>> lst [10, 20, 30] >>> {str(item):item for item in lst} {'10': 10, '30': 30, '20': 20} |
。
仅用于字符串。
1 2 3 4 5 | >>> lst = ['a','b','c'] >>> lst ['a', 'b', 'c'] >>> {item:item for item in lst} {'a': 'a', 'c': 'c', 'b': 'b'} |