2017-02-02 5 views
0

値ときに、私は、次のはTypeError NoneType辞書に行う減算

  • 第二から第一の値を減算ソート済みリスト
  • に辞書のキー
  • convertes配列内の値を減算を行うスクリプトを持っています
  • 次に第3から第2の番号
  • など。

ソースデータで値がnullになることがあり、TypeErrorがスローされるという問題があります。私は条件を投げ込もうとしましたが、それでもNonesを減算しようとします。あなたながら

eLinks = {'726122193.0': [1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340, 1310, 1315, 1320, 1325, 1330, 1335, 1340], '23607015.0': [None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None, None, None, None, 90, 95, 130, 2070, None, None, None, 580, 585, 610, 615, 2355, 2360, 1945, 1950, 125, 130, None, None, None]} 

eOut = {} 
for key, lis in eLinks.iteritems(): 
    eCheck = [] 
    sLis = sorted(lis) 
    for i, _ in enumerate(sLis[:-1]): 
     if i is not None: 
      dif = sLis[i+1] - sLis[i] 
      if dif > 20: 
       eCheck.append(dif) 
      eOut[key] = eCheck 
+0

You''reは 'NONE'種類を比較します。 –

+0

処理する前にまずNonesを削除してみませんか? –

+0

@John Colemanこのデータは、数千のキーを持つESRIフィーチャクラスから生成されています。これはほんの少しのサンプルです。スクリプトを実行するたびにNonesを削除することは可能ではありません。 – ShaunO

答えて

1

あなたが後None値を離れてスライスできソートしてから、内部ループ内のNoneの識別について心配する必要はありません。

あなたのサンプルデータでは

eOutは次のようになります。

{'23607015.0': [30, 450, 25, 1330, 120, 285]} 
+0

ありがとうジョン。私は条件付きで修正するのが好きです。 – ShaunO

1

あなたは明確に

if i is not None: 

iをチェックするという意味ではありませんでした、(それはenumerateから来ている)Noneことはありません。ここで

は、いくつかのサンプルデータとコードがあります必ず確認してください。sLis[i+1]sLis[i]Noneです。

if sLis[i+1] is not None and sLis[i] is not None: 

クリーナーバージョンはこのようなものになるだろう:

即時バグ修正と上記の行を交換することである

e_links = {'726122193.0': [1310, 1315, 1320, … 

result = {} 
for key, links in e_links.iteritems(): 
    links = sorted(l for l in links if l is not None) 
    pairs = zip(links, links[1:]) 
    result[key] = [b-a for a, b in pairs if b-a>20] 
+0

ありがとう。あなたのソリューションはうまくいきましたが、私は条件付きの範囲外のJohn Colemanの修正を好みます。 – ShaunO

関連する問題