关于python:是否可以将变量转换为字符串?

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}

注意,存储在d中的值是布尔常量。一旦创建了它,就不能通过更改变量is_text动态更改d['is_text']的值,因为bool是不可变的。

在您的例子中,您不必使file_attributes成为复合数据结构,只需使其成为关键字参数:

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