2011-09-01 2 views
0

에서 값을 제거 :나는이 같은 파이썬 딕셔너리했다 파이썬 딕셔너리

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

내가 뭔가를 계산했다 각 "문자"키를,하지만 난 INF 또는 NaN이 같은 값을 얻은 나는 그들을 제거해야 . 내가 어떻게 할 수 있니?

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

은 아마이 : 내 첫 시도

는 0에서 1000 사이의 값하지만 난 이런 짓을 할 때, 나는 빈 값으로 딕셔너리를 가지고 돌아 등의 값, 즉, "컷"하는 것이 었습니다 더 나은 해결책, 제발 도와주세요!

이 내 코드의 일부 (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

''나노 '와''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']