Прежде всего, вы не должны использовать ключевое слово dict
как имя переменной, так как оно загрязняет пространство имен и не позволяет ссылаться на класс dict
в текущей или встроенной области.
d = {}
d["joe"] = 20
d["bill"] = 20.232
d["tom"] = 0.0
# create an intermediate generator that is fed into dict constructor
# via a list comprehension
# this is more efficient that the pure "[...]" variant
d2 = dict(((k, v) for (k, v) in d.iteritems() if v > 0))
print d2
# {'bill': 20.232, 'joe': 20}
Кроме того, вы можете просто создать генератор и итератор над ним напрямую. Это больше похоже на «фильтр», потому что генератор ссылается только на значения в исходном dict вместо создания копии подмножества; и, следовательно, более эффективен, чем создание нового словаря:
filtered = ((k, v) for (k, v) in d.iteritems() if v > 0)
print filtered
# <generator object <genexpr> at 0x034A18F0>
for k, v in filtered:
print k, v
# bill 20.232
# joe 20
Вопросник хочет вернуть словарь, это возвращает только ключи словаря. И это просто менее эффективно/Pythonic, чем ответ @ kindall –
может быть следующим: 'd = dict (filter (lambda x: x [1]> 0.0, d.items()))' – Jeffery