2016-08-26 17 views
0

私は現在、私のウェブゲームに多くのものをキャッシュしようとしています。 これはちょっとしたスピードランゲームです。そこには特定のセクションがあり、それはディクテーション内のセクションの各期間を保存します。Python - 1つではなくキーで値を増やす

dict = [{'account_id': '10', 'Damage': 4874, 'duration': 50.020756483078},  
{'account_id': '10', 'Damage': 5920, 'duration': 20.020756483078}, 
{'account_id': '10', 'Damage': 2585, 'duration': 30.02078}, 
{'account_id': '4', 'Damage': 3145, 'duration': 21.020756483078}, 
{'account_id': '4', 'Damage': 4202, 'duration': 60.020756483078}, 
{'account_id': '4', 'Damage': 5252, 'duration': 66.020756483078}] 

(そのはるか、ACCOUNT_IDのための10個の項まで、私はちょうどこの質問に使用する例を作成した)

だから今、私はかなり長い辞書を持っています

はその後、我々は

経由しかし、私はキャッシュから時間を取得しようとすると、ACCOUNT_ID

enterDict = {} 
for x in dict : 
    enterDict[x["account_id"]] = x 

にそれらの時間を割り当てる必要があります

またとして

account_id = "4" 
EnterInfo = enterDict[account_id] 
print(EnterInfo) 

1つだけ

{:5252、 'ACCOUNT_ID':4 ''、 '持続時間' 66.020756483078 'ダメージ'}戻り

我々はこの問題を解決する場合私は彼らに命令を与える方法はありますか? dictsはすべてを台無しにしているので。

だから、右の正しい順序のthats以来、トップ1に、最低期間から開始する必要があります。

したがって、60の場合は21 [1]、66の場合は[2]の最小期間で[0]を使用できます。新しいキーがあるかどうか気にしません: "order"の値: "0" 「順序」:「1」と「秩序」:「2」

{'account_id': '4', 'Damage': 3145, 'duration': 21.020756483078}, 
{'account_id': '4', 'Damage': 4202, 'duration': 60.020756483078}, 
{'account_id': '4', 'Damage': 5252, 'duration': 66.020756483078}] 

答えて

1

あなたが実際に何をしたいかは、あなたの「ACCOUNT_ID」キーの後ろの値として辞書のリストを作成することです。今度は、追加する(追加する)のではなく、キーの前の値をそれぞれの値に置き換えます。

は、辞書内のリストを初期化する方法例えば1を参照してください。

が一定値にdictsのリストを注文する例えば2を参照してください。しかし、私はこの仕事のためのパンダのデータフレームを提案することもできます。

from collections import defaultdict 
from operator import itemgetter 

enterDict = defaultdict(list) 
for item in dict: 
    enterDict[item['account_id']].append(item) 

sortDict = defaultdict(list) 
for key_of_dict in enterDict: 
    sorted_list = sorted(enterDict[key_of_dict], key=itemgetter('duration')) 
    sortDict[key_of_dict] = sorted_list 

これが解決策になる可能性

関連する問題