2013-09-13 4 views
4

У меня есть список словарей, который выглядит примерно так:Печать всех значений данного ключа словарей в списке

list =[{"id": 1, "status": "new", "date_created": "09/13/2013"}, {"id": 2, "status": "pending", "date_created": "09/11/2013"}, {"id": 3, "status": "closed", "date_created": "09/10/2013"}] 

Что я хочу сделать, это быть в состоянии напечатать все значения в этом список словарей, которые относятся к «ид» Если бы это был только один словарь я знаю, что я мог бы сделать так:

print list["id"] 

Если бы это был только один словарь, но, как я делаю это для списка словарей? Я пробовал:

for i in list: 
    print i['id'] 

, но я получаю сообщение об ошибке, которое говорит

TypeError: string indices must be integers, not str 

Может кто-нибудь дать мне руку? Благодаря!

+5

Петля для работы отлично подходит для меня. Вы не должны использовать 'list' как имя переменной, поскольку это переназначает встроенную функцию конструктора' list', но по крайней мере в моей установке это не фатальная ошибка. У вас, вероятно, есть что-то еще, что вы не показываете. –

+0

Ваш код работает для меня. o_O Какую версию python вы используете – Shashank

+0

Ваш код тоже работает для меня, вы можете проверить его еще раз? – Gcmalloc

ответ

6

Где-то в вашем коде переменная была переназначена строковым значением, а не была списком словарей.

>>> "foo"['id'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: string indices must be integers, not str 

В противном случае ваш код будет работать.

>>> list=[{'id': 3}, {'id': 5}] 
>>> for i in list: 
... print i['id'] 
... 
3 
5 

но советы о не используя list как имя до сих пор стоит.

3

Я попытался ниже в оболочке Python, и она работает:

In [1]: mylist =[{"id": 1, "status": "new", "date_created": "09/13/2013"}, {"id": 2, "status": "pending", "date_created": "09/11/2013"}, {"id": 3, "status": "closed", "date_created": "09/10/2013"}] 

In [2]: for item in mylist: 
    ...:  print item 
    ...: 
{'status': 'new', 'date_created': '09/13/2013', 'id': 1} 
{'status': 'pending', 'date_created': '09/11/2013', 'id': 2} 
{'status': 'closed', 'date_created': '09/10/2013', 'id': 3} 

In [3]: for item in mylist: 
    print item['id'] 
    ...: 
1 
2 
3 

Никогда не используйте зарезервированные слова или имена, которые ссылаются на встроенные типы (как и в случае list) в качестве имени для ваших переменных.

+0

Downvote. 'list' не является обязательным word_, это просто имя для встроенного типа списка. И при использовании в качестве имени переменной тени это встроено в область переменной, обычно это не проблема. Реальная проблема с использованием 'list' в качестве имени переменной заключается в том, что она крайне незначительна (это список, но что он содержит?) - должно быть предпочтительным имя переменной говорящего, поскольку оно сообщает читателю цель переменной, а не просто его тип данных. – l4mpi

+0

@ l4mpi Хорошо, вы правы, спасибо. Я обновил свой ответ, чтобы отразить вашу точку зрения. В этом случае я использовал «mylist», поскольку это был самый простой способ подменить «list», когда использовалось имя переменной OP. –

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