2016-06-13 4 views
1

Die BeispiellisteWie finde ich die Indexnummer der Liste im Wörterbuch?

{ 
'date': array(['06/08/2016', '06/09/2016', '06/10/2016']), 
'close': array([ 923.13, 914.25, 909.42]) 
} 

Ich versuche, das Datum der Nähe zu bekommen, ist 914,25, die Liste [ ‚date‘] ​​[2] aber ich weiß nicht, wie Index 2 für nahe zu kommen.

Vielen Dank.

+0

Sie auf [Numpy Äquivalent list.index] (http://stackoverflow.com/questions/5098046/numpy-equivalent-of-list-index) für die Verwendung des zweiten Teils mit dem bereits auf der Suche betrachten kann bestehende Struktur. –

+0

Danke, dass Sie eine Antwort hinzufügen möchten. Allerdings tun wir dies nicht in Fragen hier - wenn Sie etwas anderes als die akzeptierte Antwort unten hinzufügen möchten, zögern Sie nicht, eine weitere Antwort hinzuzufügen. Bitte fügen Sie den Titeln hier auch nicht [gelöst] hinzu - ich weiß, dass es an anderer Stelle beliebt ist, aber wir verwenden das Häkchen, um Fragen stattdessen als gelöst zu markieren. Vielen Dank! – halfer

Antwort

2

Ideal, wenn Sie diese Art von Abfragen häufig tun würden, sollten Sie Ihre Daten restrukturieren, um den Anwendungsfall besser zu passen. Zum Beispiel, haben Sie ein Wörterbuch, wo die Schlüssel Beträge und Daten sind Werte. Dann hätten Sie schnelle O(1) Lookups in das Wörterbuch nach Schlüssel.

Aber in diesem Zustand des Problems, können Sie es mit zip() und next() lösen:

>>> d = { 
... 'date': ['06/08/2016', '06/09/2016', '06/10/2016'], 
... 'close': [ 923.13, 914.25, 909.42] 
... } 
>>> a = 914.25 
>>> next(date for date, amount in zip(d['date'], d['close']) if amount == a) 
'06/09/2016' 

Beachten Sie, dass, wenn die Menge nicht gefunden werden würde, next() mit einer StopIteration Ausnahme fehlschlagen würde. Sie können es entweder behandeln, oder Sie können vorher eine Standard bieten:

>>> a = 10.00 
>>> next((date for date, amount in zip(d['date'], d['close']) if amount == a), 'Not Found') 
'Not Found' 
+1

"Im Idealfall sollten Sie Ihre Daten für den Anwendungsfall besser umstrukturieren, wenn Sie diese Art von Abfragen häufig durchführen." - Der beste Teil der Antwort! – SilentMonk

+0

Vielen Dank. @alecxe – Barbiyong

+1

Ich liebe diesen Teil seiner Antwort auch. @ SilentMonk – Barbiyong

1

Sie können dies versuchen:

>>> data = { 'date': ['06/08/2016', '06/09/2016', '06/10/2016'],'close': [ 923.13, 914.25, 909.42]} 
>>> data['date'][data['close'].index(914.25)] 
'06/09/2016' 

Dank index(), Sie sind in der Lage, den Index des gewünschten Wert zu erhalten (914,25 in diesem Fall).

0

Woher kommt das Beispiel? Ich glaube nicht, dass Sie in Python einen array String haben können.

Unter der Annahme, dass die Python-Datenstruktur ist:

{ 
    'date': ['06/08/2016', '06/09/2016', '06/10/2016'], 
    'close': [923.13, 914.25, 909.42] 
} 

und die Indizes von close passen immer die Indizes von date, dann:

In [1]: d = { 
    ...:  'date': ['06/08/2016', '06/09/2016', '06/10/2016'], 
    ...:  'close': [923.13, 914.25, 909.42] 
    ...: } 

Sie finden den Index von 914,25:

In [2]: d['close'].index(914.25) 
Out[2]: 1 

Sie finden das entsprechende Datum:

In [3]: d['date'][1] 
Out[4]: '06/09/2016' 
Verwandte Themen