Создать новый list
, если значение dict['a'] > 35
:
mydict = {'a':[45,65,78,32], 'b':['red','blue','green','yellow'], 'c':[3.4, 4.5, 6.5, 7.6]}
Python 3.x :
Использование itertools.zip_longest(*iterables, fillvalue=None)
:
Из документов :
Создайте итератор, который объединяет элементы из каждого из итераций.
Если итерации имеют неравную длину, пропущенные значения заполняются
с fillvalue. Итерация продолжается до тех пор, пока самая длинная итерация не будет
истощен
print([y for x,y in zip_longest(mydict['a'],mydict['b']) if x > 35])
Python 2.x :
Использование itertools.izip_longest(*iterables[, fillvalue])
print([y for x,y in izip_longest(mydict['a'],mydict['b']) if x > 35])
OUTPUT
['red', 'blue', 'green']
EDIT
В чем разница между zip()
и zip_longest()
?
Рассмотрим следующие списки:
x = [1,2,3,4,5]
y = ['a','b','c']
for a,b in zip(x,y):
print(a,b)
OUTPUT
1 a
2 b
3 c
Он явно пропустил элементы 4,5
в x
, поскольку не смог найти соответствующие им элементы в y
.
Использование zip_longest()
:
x = [1,2,3,4,5]
y = ['a','b','c']
for a,b in zip_longest(x,y):
print(a,b)
OUTPUT
1 a
2 b
3 c
4 None
5 None
Он не пропустил элементы в x
, вместо этого заполнил недостающие в y None
.