将非零项从字典添加到另一个字典

时间:2016-03-01 09:44:59

标签: python dictionary

我有一组存储在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

不幸的是,这不起作用。 我的问题:

  • 我是否正确地在字典上进行迭代?
  • 我是否正确地将项目添加到新词典?

3 个答案:

答案 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}
>>>