尝试在python中处理字典列表时出错

尝试在python中处理字典列表时出错,python,list,dictionary,unicode,encode,Python,List,Dictionary,Unicode,Encode,我有一个Python字典列表(包含单值和多值的键) 显然,数据是unicode格式的,这是我面临的问题 x = "..." my list of dictionaries #printing type(x) gave me "unicode" 我希望能够做到 for i in x: print i[key] 我想,对于unicode,这似乎并不直接。所以我做了 r = x.encode('utf8') # printing type(r) gave me "str" 但当我这么做

我有一个Python字典列表(包含单值和多值的键)

显然,数据是unicode格式的,这是我面临的问题

x = "..." my list of dictionaries  #printing type(x) gave me "unicode"
我希望能够做到

for i in x:
    print i[key]
我想,对于unicode,这似乎并不直接。所以我做了

r = x.encode('utf8') # printing type(r) gave me "str"
但当我这么做的时候

 for i in r: #r here is in str format
        print i[key]
我得到以下错误“TypeError:字符串索引必须是整数,而不是str”


这很令人困惑

如果您的词典列表是您在问题中提到的字符串,则使用
ast
modules'
literal\u eval()
将其转换为词典列表。然后可以访问字典中的键和值

演示:

导入ast >>>data=“[{'a':'b'},{'a':'d'},{'a':'f'}” >>>类型(数据) >>>目录列表=ast.literal评估(数据) >>>类型(目录列表) >>>键='a' >>>对于目录列表中的i: ... 打印i[键] ... B D F
如果您的词典列表是一个字符串,那么
i
将是一个单个字符,因此您将无法执行
i[key]
那么如何修复它呢?。不过,我还是能够在MAc上的python CLI上以“str”的形式完成它。这是最奇怪的部分。我将“x”复制到MAC上,类型(x)似乎是字符串。我可以像我想的那样迭代它-也得到了正确的值。在centOS,我有这个问题!
>>> import ast
>>> data = "[{'a':'b'}, {'a':'d'}, {'a':'f'}]"

>>> type(data)
<type 'str'>

>>> list_of_dicts = ast.literal_eval(data)
>>> type(list_of_dicts)
<type 'list'>

>>> key = 'a'
>>> for i in list_of_dicts:
...     print i[key]
...
b
d
f