2016-04-15 8 views
1

私は、キーと、このような値としてタプルを持つ辞書持っている:私は最初の提供にすべてのキーと値にアクセスしたい組で一つのキーを持つ辞書のキーと値にアクセスする

dic = {('1/1/2016', '00:00'): data1, 
     ('1/1/2016', '00:05'): data2, 
     ('2/1/2016', '00:00'): data3} 

を辞書のすべてのデータをループせずにタプルの要素(日付)。あまりにも多くの処理をせずにそれを行う方法はありますか?

+4

いいえ。タプルの最初の要素で値を見つけることは、それを与えたそのデータ構造では、部分線形時間で実行できません。 –

+5

は、時間が第2レベルにあるネストされた辞書を使用します。 –

答えて

2

AlexHallとAntti Haapalaの推奨では、ネストされた辞書を使用することで問題が解決されます。ありがとう

2

一度ループして新しい辞書を作成すると、必要に応じてデータを検索できます。

dic = {('1/1/2016', '00:00'): 1, 
     ('1/1/2016', '00:05'): 2, 
     ('2/1/2016', '00:00'): 3} 

new_dict = {} 
for item in dic.items(): 
    key = item[0][0] 
    new_dict.setdefault(key,[]) 
    new_dict[key].append(item) 
+1

1) 'setdefault'が値を返すので、' new_dict.setdefault(key、[])。append(item) 'が実行します(' key'は一度だけ現れるので、インライン化できます)。 2)さらに良い: 'new_dict = defaultdict(list)'と 'new_dict [key] .append(item)'。 3)これは時間を見上げる能力を失う。時間を第2のキーとするネストされた辞書は、より使用可能である。 –

+0

@AlexHall私は1と2を考えましたが、読みやすくするためにこのルートを行っていますが、インポートはありません。 3については、あなたは絶対に正しいですが、それは本当に問題ではありませんでした。 –

関連する問題