2017-12-10 13 views
0

これは私が持っているデータです:それはそれが文字列キーと複数のタプルを持つ辞書であることがわかります。私は、キーの文字列と有料文字列を値(フロート)を参照するために使用するためにルックアップ関数を記述しようとしています。どのようにキーを使用して辞書の値を見つけて、タプル(辞書の値)内の値を検索するのですか?

dict1 = {'20MAY17': [('TOLL2', 9817.73), ('TOLL3', 8395.49)], '23MAY17': [('TOLL2', 6497.36), ('TOLL4', 6827.51)], '13MAY17': [('TOLL4', 9803.42)], '5MAY17': [('TOLL3', 6677.66)], '16MAY17': [('TOLL4', 1565.78), ('TOLL3', 7949.97), ('TOLL2', 3739.91)], '12MAY17': [('TOLL2', 5680.84)], '6MAY17': [('TOLL2', 2420.46)], '28MAY17': [('TOLL3', 6405.19), ('TOLL4', 1358.27)], '22MAY17': [('TOLL4', 4022.52), ('TOLL3', 8823.13)], '11MAY17': [('TOLL4', 4832.2699999999995)], '27MAY17': [('TOLL3', 8878.97)], '17MAY17': [('TOLL4', 4150.74)], '3MAY17': [('TOLL3', 5729.33)], '24MAY17': [('TOLL4', 1452.02), ('TOLL1', 3860.73)], '8MAY17': [('TOLL1', 9863.36)], '18MAY17': [('TOLL1', 4584.25)], '15MAY17': [('TOLL1', 8640.64)]} 

辞書はdict1と呼ばれます。

ここでは関数ですが、私はユーザー入力を使用しています。

def lookup(dict1, str1, str2): 
    print(dict1[str1][str2]) 

は、それはこのような何かを行う必要があります。

lookup(dict1, '20MAY17', 'TOLL2') 

9817.73

lookup(dict1, '20MAY17', 'TOLL3') 

8395.49

+0

なぜディクテーション内にディクテーションがないのですか?その後、現在のコードは正常に動作します。 –

+0

ガイドラインは、この形式で辞書を返すようにしています。また、私はあなたが言っていることをする方法を知りません。 –

答えて

2

あなたは辞書内の辞書を持つことができます。 (元のデータはoriginal_dataに格納されていた場合)私はその後、あなたは、単に二重のアイテムの検索で検索を行うことができます

単にによってあなたのデータを前処理するために
data = dict((key, dict(tpl)) for key, tpl in original_data.items()) 

を示唆している:

data['20MAY17']['TOLL2'] 
1

あなたのデータ構造を変換しますタプルのリストの代わりに辞書の値を辞書に追加します。その後、検索は簡単です。

>>> d = {'20MAY17': [('TOLL2', 9817.73), ('TOLL3', 8395.49)], '23MAY17': [('TOLL2', 6497.36), ('TOLL4', 6827.51)]} 
>>> d_better = {k:dict(v) for k,v in d.items()} 
>>> d_better 
{'20MAY17': {'TOLL2': 9817.73, 'TOLL3': 8395.49}, '23MAY17': {'TOLL4': 6827.51, 'TOLL2': 6497.36}} 
>>> 
>>> def lookup(dict_, day, toll): 
...  return dict_[day][toll] 
... 
>>> lookup(d_better, '20MAY17', 'TOLL2') 
9817.73 

あなたが見ることができるように、lookup機能がやや不当であり、あなたが直接d_better[day][toll]を書くことができます。

+0

正しい答えについてのdownvoteを説明するのに気をつけますか? – timgeb

+0

私はそれをupvoted、downvoteしなかった!なぜそれが-1を示したのかわかりません –

+0

また、あなたが言ったことをするとき。 d_better [ '20MAY17'] [ 'TOLL2'] トレースバック(最新の呼び出しの最後): d_betterで ファイル ""、行1、[ '20MAY17'] [ 'TOLL2'] KeyError例外: '20MAY17' 何らかの理由でキーエラーが発生します。 –

1

変更する機能:

第二の鍵が渡される前に、dictのキーが辞書に変換されるので、これは動作します
def lookup(dict1, str1, str2): 
    print(dict(dict1.get(str1)).get(str2)) 

関連する問題