2016-06-13 7 views
1

これは私の辞書スキーマです。最も低いキー値を持つ辞書を取得する方法

f = { 'client_id': {'client_name': [{'transaction_date': date_time, 
            'transaction_amount': value_in_dollar}] 
        } 
    } 

最も低いtransaction_amountで辞書を取得する方法。

例入力:

f = { 905220: {'Steven Jhon': [{'transaction_date': '2016-05-07 00:00:00+00', 
           'transaction_amount': 1198}, 
          {'transaction_date': '2016-05-08 00:00:00+00', 
           'transaction_amount': 4889}] 
       }, 
     905221: {'Chris Chris': [{'transaction_date': '2016-05-01 00:00:00+00', 
            'transaction_amount': 50}, 
           {'transaction_date': '2016-05-02 00:00:00+00', 
            'transaction_amount': 100}, 
           {'transaction_date': '2016-05-03 00:00:00+00', 
            'transaction_amount': 10}] 
       }  
    } 

所望の出力:

f = { 905220: {'Steven Jhon': [{'transaction_date': '2016-05-07 00:00:00+00', 
           'transaction_amount': 1198}] 
       }, 
     905221: {'Chris Chris': [{'transaction_date': '2016-05-03 00:00:00+00', 
            'transaction_amount': 10}] 
       }  
    } 
+0

あなたは何を試してみましたこれまでのところ?あなたの現在のアプローチではどんな困難がありますか? – idjaw

+0

データベースから値を取得することは非常に効率的ではないので、このデータをデータベースに格納する方が良いと思われます。これをDBに移動できますか?私たちのユースケースは何ですか? – IanAuld

+0

@IanAuldデータは既にデータベースに入っていて、データベースからクライアント情報を取得し、APIにIDを渡してトランザクションの詳細を取得し、両方のセットを辞書に組み込む必要がありました。 – mongotop

答えて

3

あなたはこの1つのような大きな辞書の理解、またはヘルパー機能を使用できます。

def get_min_by_value(x): 
    if isinstance(x, dict): 
    return {k: get_min_by_value(v) for k, v in x.items()} 
    elif isinstance(x, list): 
    return [min(x, key=lambda d: d['transaction_amount'])] 

out = get_min_by_value(f) 
関連する問題