是否可以将变量转换为字符串?

时间:2014-03-07 10:54:08

标签: python

我有一个列表,我想转换为字典。

  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()

3 个答案:

答案 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'}