2

したがって、内部ディクショナリを識別する数値キーを持つ多次元ディクショナリがありますが、内部ディクショナリには数値キーがありません。内部ディクショナリの文字列インデックスの 1 つの値に基づいて、キーのソートされたリストを作成するのが困難です。問題を適切に説明していない可能性があるため、問題を強調するスクリプトの例を次に示します。

#! /usr/bin/python
my_dict = {
        12608: {
                'market_data':  {
                    'sellVolume': 69210, 'buyValue': 296.20999999999998,  
                    'sellValue': 523.20000000000005, 'buyVolume': 9210899
                    }
            },
        24513: {
            'market_data': {
                'sellVolume': 42148, 'buyValue': 548.95000000000005,  
                 'sellValue': 890.0, 'buyVolume': 11213386
                }
            },
        12773:  {
                'market_data': {
                    'sellVolume': 383000, 'buyValue': 609.54999999999995, 
                    'sellValue': 799.98000000000002, 'buyVolume': 10285288
                    }
            },
        24486: {
            'market_data': {
                'sellVolume': 1314250, 'buyValue': 99.780000000000001,  
                'sellValue': 425.0, 'buyVolume': 14690060
                }
            },
        2801: {
            'market_data': {
                'sellVolume': 247577, 'buyValue': 348.98000000000002, 
                'sellValue': 518.94000000000005, 'buyVolume': 10325916
                }
            }
    }

d_sorted = sorted(my_dict, key=lambda \
       x: my_dict[x]['market_data']['buyValue'], reverse=True)

print "key\tbuyValue"
for key in d_sorted:
    print "%d\t%.2f" % (key, my_dict[key]['market_data']['sellValue'])

そして、これがスクリプトの結果です

# Results:
# key         buyValue
# 12773   799.98
# 24513   890.00
# 2801    518.94
# 12608   523.20
# 24486   425.00

# Expected:
# key         buyValue
# 24513   890
# 12773   799.98
# 12608   523.2
# 2801     518.94
# 24486   425

辞書の例は私の完全なユースケースではありませんが、問題を示すために簡略化されたバージョンです (たとえば、問題にとって重要ではない別の内部辞書があります)。これについて言及するのは、私が知らない辞書よりも使用するのに適したデータ型がある可能性があるためです。Python は初めてです。

ここでの質問は、ここまで来るのに役立ちました。主な違いは、2 番目の次元が整数キーを使用していないことです。

問題がある場合は、pythonバージョン2.6.7を使用しています。

4

2 に答える 2

3

質問の下のコメントで述べたように、テーブル ヘッダーには「BuyValue」と表示され、「Sell value」と出力されています。あなたが期待する出力で行くと、ソーター機能の設定で小さな間違いを犯したと思います.

そのはず:

lambda x: my_dict[x]['market_data']['sellValue']

そしてそうではない

lambda x: my_dict[x]['market_data']['buyValue']
于 2012-06-10T17:33:17.700 に答える
0

でソートしてbuyValueから印刷しますsellValueが、それを呼び出すのでbuyValue、どこかでこの不一致を修正する必要があります。

以下にいくつかのオプションを示します。

  • sellValueの代わりに並べ替えbuyValue、残りは同じままにします。

    d_sorted = sorted(my_dict, key=lambda \
           x: my_dict[x]['market_data']['sellValue'], reverse=True)
    
  • buyValueそれが現在ソートしているものなので、を印刷します。

    print "key\tbuyValue"
    for key in d_sorted:
        print "%d\t%.2f" % (key, my_dict[key]['market_data']['buyValue'])
    
于 2012-06-10T17:33:48.560 に答える