2011-09-01 82 views
0

删除值我有一个Python字典是这样的:从Python字典

{'1' : {'1': {'A' : 34, 'B' : 23, 'C' : nan, 'D': inf, ...} ....} ....} 

对于每一个“信”键,我不得不计算出什么,但我得到的数值像INF或NaN,我需要将它们删除。我怎么能这样做?

我的第一次尝试是“腰斩”这样的值,即,只返回0和1000之间的值,但我这样做的时候,我得到空值的字典:

{'1' : {'1': {'A' : 34, 'B' : 23, 'C' : {}, 'D': {}, ...} ....} ....} 

也许是有更好的解决方案,请帮助!!!!

这是我的代码部分,(Q和(L)是有信息,我需要计算其他字典):

for e in L.keys(): 
    dR[e] = {} 
    for i in L[e].keys(): 
    dR[e][i] = {} 
    for l, ivalue in L[e][i].iteritems(): 
    for j in Q[e].keys(): 
     dR[e][i][j] = {} 
     for q, jvalue in Q[e][j].iteritems(): 
     deltaR = DeltaR(ivalue, jvalue) #this is a function that I create previously 
     if (0 < deltaR < 100): 
      dR[e][i][j] = deltaR 
+1

你能告诉我们你到目前为止的代码吗? – SingleNegationElimination

+0

你如何获得'nan'和'inf'?他们是字符串吗? – urschrei

+1

@urschrei:那些是特殊的浮点值:'float('inf')' – hop

回答

0

我走在这里瞎猜,但你可以可能以几种不同的方式做到这一点。一种方法是计算该值,然后决定是否在将其粘贴到字典之前确实想保留它。

d = {} 
for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ': 
    # I don't actually know how you're calculating values 
    # and it kind of doesn't matter 
    value = calculate(letter) 
    if value in (inf, nan): 
     continue 
    d[letter] = value 

我简化字典只关注数据中实际使用字母作为关键字的部分,因为您没有真正给出任何上下文。话虽如此,我可能会采取第一个建议,除非有理由不这样做。

for e in L.keys(): 
    dR[e] = {} 
    for i in L[e].keys(): 
     dR[e][i] = {} 
     for l, ivalue in L[e][i].iteritems(): 
      for j in Q[e].keys(): 
       #dR[e][i][j] = {} # What's up with this? If you don't want an empty dict, 
           # just don't create one. 
       for q, jvalue in Q[e][j].iteritems(): 
        deltaR = DeltaR(ivalue, jvalue) #this is a function that I create previously 
        if (0 < deltaR < 100): 
         dR[e][i][j] = deltaR 
       if dR[e][i][j] in (nan, inf): 
        del dR[e][i][j] 
+0

谢谢...这正是我想要的! :) – Alejandro

1

您应该可以使用del语句来删除字典项目。例如:

del dct['1']['1']['C']