Python程序将字典视为字符串

时间:2011-09-26 01:26:32

标签: python dictionary

我设置了一个字典,并从文件填充,如下:

filedusers = {} # cheap way to keep track of users, not for production
FILE = open(r"G:\School\CS442\users.txt", "r")
filedusers = ast.literal_eval("\"{" + FILE.readline().strip() + "}\"")
FILE.close()

然后我对它进行了测试,如下:

  

如果不是filedusers.get(words [0]):

其中words[0]是用户名的字符串,但我收到以下错误:

  

'str'对象没有属性'get'

但我已经验证了FILE.close()后我有一本字典,并且其中包含正确的值。

知道发生了什么事吗?

3 个答案:

答案 0 :(得分:5)

literal_eval接受一个字符串,并将其转换为python对象。所以,以下是真的......

ast.literal_eval('{"a" : 1}')
>> {'a' : 1}

但是,您正在添加一些不需要的引用。如果您的文件只包含一个空字典({}),那么您创建的字符串将如下所示......

ast.literal_eval('"{}"') # The quotes that are here make it return the string "{}"
>> '{}'

因此,解决方案是将线路更改为......

ast.literal_eval("{" + FILE.readline().strip() + "}")

...或...

ast.literal_eval(FILE.readline().strip())

..取决于您的文件布局。否则,literal_eval会因为引号而将您的字符串视为ACTUAL字符串。

答案 1 :(得分:3)

>>> import ast
>>> username = "asd: '123'"
>>> filedusers = ast.literal_eval("\"{" + username + "}\"")
>>> print filedusers, type(filedusers)
{asd} <type 'str'>

你没有字典,它只是一个字典。你有一个字符串。

答案 2 :(得分:1)

Python是动态类型的:它不要求您将变量定义为特定类型。它允许您隐式定义变量。您正在做的是将filedusers定义为字典,然后通过将ast.literal_eval的结果分配给字符串,将重新定义作为字符串。

编辑:您需要删除这些引号。 ast.literal_eval('"{}"')计算为字符串。 ast.literal_eval('{}')评估字典。