thelist = [{'color':'green', 'time':4}, {'color':'red','time':2},{'color':'blue','time':5}]
Как я могу сказать:
If "red" is in thelist and time does not equal 2 for that element (that we just got from the list):
Используя any()
, чтобы узнать, есть ли элемент, удовлетворяющий условиям:
>>> any(item['color'] == 'red' and item['time'] != 2 for item in thelist)
False
any([...])
чтобы получить классическое понимание списка. (см. python.org/dev/peps/pep-0289 для получения дополнительной информации о выражениях генератора)
def colorRedAndTimeNotEqualTo2(thelist):
for i in thelist:
if i["color"] == "red" and i["time"] != 2:
return True
return False
print colorRedAndTimeNotEqualTo2([{'color':'green', 'time':4}, {'color':'red','time':2},{'color':'blue','time':5}])
для я в списке выполняется итерация через список, назначение текущего элемента я и выполнение остальной части кода в блоке (для каждого значения i)
Спасибо за уловку, Бенсон.
for val in thelist:
if val['color'] == 'red' and val['time'] != 2:
#do something here
Но это не похоже на правильную структуру данных.
Ну, нет ничего такого элегантного, как "найти", но вы можете использовать понимание списка:
matches = [x for x in thelist if x["color"] == "red" and x["time"] != 2]
if len(matches):
m = matches[0]
# do something with m
Однако я нахожу [0]
и len() утомительным. Я часто использую цикл for с срезом массива, например:
matches = [x for x in thelist if x["color"] == "red" and x["time"] != 2]
for m in matches[:1]:
# do something with m
list = [{'color':'green', 'time':4}, {'color':'red','time':2},{'color':'blue','time':5}]
for i in list:
if i['color'] == 'red' && i['time'] != 2:
print i
Вы можете выполнять большую часть манипулирования списками в понимании списка. Здесь один, который составляет список раз для всех элементов, где красный цвет. Тогда вы можете спросить, существует ли 2 в те времена.
thelist = [{'color':'green', 'time':4}, {'color':'red','time':2},{'color':'blue','time':5}]
reds = ( x['time'] == 2 for x in thelist if x['color'] == red )
if False in reds:
do_stuff()
Вы можете конденсировать это еще больше, исключив переменную "reds" следующим образом:
thelist = [{'color':'green', 'time':4}, {'color':'red','time':2},{'color':'blue','time':5}]
if False in ( x['time'] == 2 for x in thelist if x['color'] == red ):
do_stuff()