У меня есть словарь в следующем формате,
mydict =
{ a: [1, 2],
b: [2, 2],
c: [1, 0],
d: [1, 1]
}
если какое-либо значение None
{ a: [1, None],
b: [2, 2],
c: [1, 0],
d: [1, 1]
}
Я хочу удалить эту пару key:value
.
выход должен быть
{
b: [2, 2],
c: [1, 0],
d: [1, 1]
}
я печатаю это так,
for key, values in mydict.items():
print key, values
.
.
.
Я хочу удалить None
не запустив новый цикл в моем цикле for
поэтому я попробовал это,
Я попробовал это,
for key, values in mydict.items() if values.items is not None:
но он продолжает давать мне неверную синтаксическую ошибку,
SyntaxError: invalid syntax
менять
for key, values in mydict.items(): print key, values
в
for key, values in mydict.items(): if (None not in values): print key, values
Используйте понимание словаря:
d = { 'a': [1, None],
'b': [2, 2],
'c': [1, 0],
'd': [1, 1] }
print({k:v for k, v in d.items() if None not in v})
# {'b': [2, 2], 'c': [1, 0], 'd': [1, 1]}
Если вам нужен цикл, подобный вашему:
for key, value in d.items():
if None not in value:
print(key, value)
# do your calculations here
for
цикла, это не помогает мне.
Ты можешь попробовать
mydict = { 'a': [1, None],
'b': [2, 2],
'c': [1, 0],
'd': [1, 1]
}
from copy import copy
newdict = copy(mydict)
for key, values in mydict.items():
if None in values:
newdict.pop(key)
print newdict
mydict
вместо newdict
(работает в Python 2.7, но показывает ошибку RuntimeError: dictionary changed size during iteration
в Python 3.x). Я использовал копирование, чтобы предотвратить это, так как мы меняем содержимое словаря, перебирая его.
Попробуйте использовать filter
+ lambda
:
d=dict(filter(lambda x: None not in x[1], list(d.items())))
print(d)
Или с циклом for:
newd = {}
for k,v in d.items():
if not None in v:
newd.update({k:v})
newd
Использование dictionary comprehension
your_dict = {key:value for key,value in my_dict.items() if None not in value}
Выход:
{'b': [2, 2], 'c': [1, 0], 'd': [1, 1]}