2014-08-28 2 views
0

У меня есть список словарей (ключ с одним и несколькими значениями) в Python.Ошибка при попытке обработать список словарей в python

По-видимому, данные находятся в формате Юникода, который является проблемой, с которой сталкивается i.

x = "..." my list of dictionaries #printing type(x) gave me "unicode" 

Я хочу быть в состоянии сделать

for i in x: 
    print i[key] 

Это не похоже прямо вперед с Юникода я думаю. Так что я сделал,

r = x.encode('utf8') # printing type(r) gave me "str" 

, но когда я делаю

for i in r: #r here is in str format 
     print i[key] 

Я получаю следующее сообщение об ошибке «Ошибка типа: строковые индексы должны быть целыми, не StR»

Это очень сбивает с толку!

+0

Если список словарей является строкой, то 'i' бы один символ, и, следовательно, вы не сможете сделать' I [ключ] ' – shaktimaan

+0

Так как я исправлю это ?. Я смог сделать это как «str» на CLI python на MAc. Это самая странная часть. Я скопировал 'x' на MAC и тип (x) выглядит как строка. и я мог прокручивать его, как я хотел, и получил правильные значения. На centOS у меня есть эта проблема! – user2921139

ответ

1

Если ваш список словарей является строкой, как вы упомянули в вопросе, используйте ast modules 'literal_eval(), чтобы преобразовать ее в список словарей. Затем вы можете получить доступ к ключам и значениям в словаре.

Демо:

>>> 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 
+0

Perfect Shaktimaan! – user2921139

+0

Видимо, работает и для строки unicode. Не только струны. – user2921139

Смежные вопросы