2014-01-21 3 views
0

Обычно я использовал методы списка для повторения и фильтрации по данным (например, dicts и т. Д.) В пределах необходимости писать несколько строк для циклов.Простая 1 строка для циклов

[x['a']["b"] for x in s["items"] if x["car"] == "ford"] 

Однако это возвращает список таких как:

[False] 

Не массивная проблема, как я могу написать

[x['a']["b"] for x in s["items"] if x["car"] == "ford"][0] 

Однако есть способ или с списковых или другим способом напишите цикл for, в котором условие if, чтобы я получил только возвращаемую строку?

Edit: Другими словами, как я могу поместить следующий на одной строке и возвращает строку,

for x in s["items"]: 
    if x["car"] == "ford": 
     print x['a']['b'] 

Спасибо,

+0

Просьба уточнить, какой результат вы хотите. В вашем описании отсутствует – StoryTeller

+0

, можете ли вы показать dict 's'? –

+0

вопрос обновлен – felix001

ответ

3

Если я правильно понимаю, вы хотите короткое замыкание в первом матче. Используйте next вместе с выражением генератора:

>>> s = {'items': [{'a': {'b': 'potato'}, 'car': 'ford'}, {'a': {'b': 'spam'}, 'car': 'honda'}]} 
>>> next(x['a']['b'] for x in s['items'] if x['car'] == "ford") 
'potato' 
-1

No. описаний списков являются, как следует из их названия, для создания списки в простой и сжатой форме.

Вы можете просто написать циклы for и проверить каждый элемент для фильтрации ваших данных. Если вам нужен более простой способ фильтрации, проверьте filterbuilt-in.

filter(s["items"], key=lambda x: x["car"] == "ford")[0]["a"]["b"] 
0

Там нет ничего в синтаксиса вашей проблемы, что гарантирует, что существует только значение s, которая удовлетворяет критерию. (I.E., для произвольного может быть более одного.)

Возможно, вы можете гарантировать, что это так, но это является внешним по отношению к (этой части) кода.

Следовательно, python не сможет автоматически принудительно применять это.

1

Как вы не показали, что Dict s, я тестировал с возможными данными и она отлично работает:

>>> s = {'items': [{'a': {'b': 1}, 'car': 'ford'}, {'a': {'b': 1}, 'car': 'honda'}]} 
>>> print [x['a']['b'] for x in s['items'] if x['car'] == "ford"] 
[1] 
Смежные вопросы