2016-08-09 19 views
-1

辞書の値を昇順で並べ替える必要があります。それから、ゼロ要素を辞書から除外しなければなりません。私はキーや値で辞書をソートする例がたくさんありましたが、値自体ではありません。これに関する助言?辞書の複数の値を昇順に並べ替える方法は?

入力:

1467606570.0,192.168.123.241,0.0 
1467606817.0,192.168.123.241,247.0 
1467607136.0,192.168.123.241,319.0 
1467607244.0,192.168.123.241,108.0 
1467607642.0,192.168.123.241,398.0 
1467608334.0,192.168.123.241,692.0 
1467606628.0,192.168.123.240,0.0 
1467606876.0,192.168.123.240,248.0 
1467607385.0,192.168.123.240,509.0 
1467606679.0,192.168.123.246,0.0 
1467607084.0,192.168.123.246,405.0 
1467607713.0,192.168.123.246,629.0 
1467608102.0,192.168.123.246,389.0 
1467607524.0,192.168.123.242,0.0 
1467608257.0,192.168.123.242,733.0 
1467608607.0,192.168.123.242,350.0 
1467608669.0,192.168.123.245,0.0 
1467608813.0,192.168.123.245,144.0 

コード:

mydict = {} 
    #sorted_dict = {} 
    reader = csv.reader(open("/tmp/log/qpm.csv", "rb")) 
    for i, rows in enumerate(reader): 
     if i == 0: continue 
     k = rows[1] 
     v = rows[2] 

     if not k in mydict: 
     mydict[k] = [v] 
     else: 
     mydict[k].append(v) 

    #for key, value in mydict.iteritems(): 
    for key, value in sorted (mydict.iteritems(), key=operator.itemgetter(1),reverse=True): 
     print key, value 

出力:

192.168.123.241 ['247.0', '319.0', '108.0', '398.0', '692.0'] 
192.168.123.242 ['0.0', '733.0', '350.0'] 
192.168.123.246 ['0.0', '405.0', '629.0', '389.0'] 
192.168.123.240 ['0.0', '248.0', '509.0'] 
192.168.123.245 ['0.0', '144.0'] 

必要な出力:

192.168.123.241 ['108.0', '319.0', '398.0', '692.0'] 
192.168.123.242 ['0.0', '350.0', '733.0'] 
192.168.123.246 ['0.0', '389.0', '405.0', '629.0'] 
192.168.123.240 ['0.0', '248.0', '509.0'] 
192.168.123.245 ['0.0', '144.0'] 

ソートの値は昇順に表示されますか?

答えて

0

サンプル出力に基づいて、キーごとにの値をにソートすると思われますか?そう、あなたのprint文があることを変更することでこれを行うことができれば:

print key, sorted(value) 

注意をvaluesリストのエントリは文字列であるので、私は何をお使いたくないです疑うlexicological順でソートすること。あなたが最初にデータを読み込む際に

print key, sorted(value, key=lambda x: float(x)) 

別の方法としては、浮動小数点数として値を格納できます:山車としてソートするには、カスタムコンパレータを指定することができます

if not k in mydict: 
    mydict[k] = [float(v)] 
else: 
    mydict[k].append(float(v)) 
+0

はあなたの助けのためにどうもありがとうございます! – rmstmg

関連する問題