我有一组存储在mydict中的值(0.0或100)的反应(键)。 现在我想将非零值放在新词典中(非词典)。
def nonzero(cmod):
mydict = cmod.getReactionValues()
nonzerodict = {}
for key in mydict:
if mydict.values() != float(0):
nonzerodict[nz] = mydict.values
print nz
不幸的是,这不起作用。 我的问题:
答案 0 :(得分:1)
您正在测试值列表是否不等于float(0)
。测试每个值,使用密钥检索它:
if mydict[key] != 0:
nonzerodict[key] = mydict[key]
您正在迭代键,但您也可以迭代键值对:
for key, value in mydict.iteritems():
if value != 0:
nonzerodict[key] = value
请注意,对于浮点值,您可能希望过滤掉非常小的值,接近于零。如果是,请测试值 close 是否为零:
if abs(value) > 1e-9:
你可以在一个字典表达式中完成整个事情:
def nonzero(cmod):
return {k: v for k, v in cmod.getReactionValues().iteritems() if abs(v) > 1e-9}
答案 1 :(得分:0)
将代码中的条件替换为:
if mydict[key]:
nonzerodict[key] = mydict[key]
您的解决方案可以进一步简化为:
def nonzero(cmod):
mydict = cmod.getReactionValues()
nonzerodict = {key: value for key, value in mydict.iteritems() if value}
答案 2 :(得分:0)
它很简单,你可以通过以下方式 -
>>> d = {'a':4,'b':2, 'c':0}
>>> dict((k,v) for k,v in d.iteritems() if v!=0)
{'a': 4, 'b': 2}
>>>