2016-04-15 3 views
1

Ich habe ein Wörterbuch mit Tupel als Schlüssel und Wert wie folgt aus:Wörterbuch Schlüssel und Wert mit einem Schlüssel in einem Tupel Zugriff

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

Ich möchte alle mit die Schlüssel und Werte für den Zugriff auf nur die erste Bereitstellung Element des Tupel (das Datum), ohne alle Daten im Wörterbuch zu durchlaufen. Gibt es eine Möglichkeit, dies ohne zu viel Verarbeitung zu tun?

+4

Nein. Das Finden eines Wertes durch das erste Element des Tupels in dieser Datenstruktur, wie Sie es angegeben haben, kann nicht in sublinearer Zeit durchgeführt werden. –

+5

verwenden verschachtelte Wörterbücher mit der Zeit in der zweiten Ebene. –

Antwort

2

Wie von AlexHall und Antti Haapala empfohlen, löst die Verwendung eines verschachtelten Wörterbuchs das Problem. Danke

2

Sie können es einmal durchlaufen und ein neues Wörterbuch erstellen, dann können Sie die Daten nach Bedarf suchen.

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' gibt den Wert zurück, also' new_dict.setdefault (key, []). Append (item) 'wird tun (und da' key' nur einmal erscheint, kann es inline sein). 2) Noch besser: 'new_dict = defaultdict (list)' und 'new_dict [key] .append (item)'. 3) Dies verliert die Fähigkeit, nach Zeit zu schauen. Ein verschachteltes Wörterbuch mit der Zeit als ein zweiter Schlüssel wäre nützlicher. –

+0

@AlexHall Ich dachte 1 und 2, aber ging diese Route für die Lesbarkeit, und keine Importe. Wie für 3, Sie haben absolut Recht, aber das war nicht wirklich die Frage. –