我有一个列表,我想转换为字典。
L = [
is_text,
is_archive,
is_hidden,
is_system_file,
is_xhtml,
is_audio,
is_video,
is_unrecognised
]
有没有办法做到这一点,我可以通过程序转换为这样的字典:
{
"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
}
变量在这里是布尔值。
这样我就可以轻松地将这个字典传递给我的函数
def updateFileAttributes(self, file_attributes):
m = models.FileAttributes(**file_attributes)
m.save()
答案 0 :(得分:4)
将变量放入列表后,无法获取变量的名称,但可以这样做:
In [211]: is_text = True
In [212]: d = dict(is_text=is_text)
Out[212]: {'is_text': True}
请注意,d
中存储的值一旦创建就是布尔常量,您不能通过更改变量d['is_text']
来动态更改is_text
的值,因为bool是不可变的。
在您的情况下,您不必将file_attributes
作为复合数据结构,只需将其设为关键字参数:
def updateFileAttributes(self, **file_attributes):
m = models.FileAttributes(**file_attributes)
m.save()
然后你可以用这种方式调用函数:
yourObj.updateFileAttributes(is_text=True, ...)
答案 1 :(得分:0)
我在这里做了一些假设来得出这个结果。 List中的变量是范围内唯一可用的bool变量。
{ x:eval(x) for x in dir() if type(eval(x)) is bool }
或者如果您已对变量强制执行命名约定
{ x:eval(x) for x in dir() if x.startswith('is_') }
答案 2 :(得分:-1)
下面的代码有效。
对于变量到字符串
>>> 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}
仅限字符串。
>>> lst = ['a','b','c']
>>> lst
['a', 'b', 'c']
>>> {item:item for item in lst}
{'a': 'a', 'c': 'c', 'b': 'b'}