2017-01-20 6 views
-4

Während mit OpenCV in Python arbeiten ich über diese Zeilen Code kamPython-Wörterbuch erklärt ohne Schlüssel

FLANN_INDEX_KDTREE = 0 
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) 
search_params = dict(checks=50) 

Ich bin neugierig, was hier geschieht, scheint es, als ob ein Python-Wörterbuch ohne Schlüssel bevölkert wird . Ich habe herumgesucht und bis jetzt noch keinen Hinweis darauf gefunden, wie das funktioniert. Hier ist der Link zur Quelle dieses Codes für Kontext: „Was genau passiert hier“

http://docs.opencv.org/trunk/da/de9/tutorial_py_epipolar_geometry.html

Insbesondere was ich frage ist

+5

Warum nicht die gleiche Zeile in Ihre Python-Shell schreiben und überprüfen, was es tut? Es hätte weniger Zeit gekostet als die Zeit, die ich brauchte, um die Frage hier zu schreiben. –

+0

Ich bin damit fertig geworden, das innerhalb von Minuten nach der Veröffentlichung herauszufinden. –

+0

Aber bis dahin wurde es beantwortet und ich konnte es nicht löschen. –

Antwort

0

Wenn Sie eine explizite Liste von Schlüssel/Wert-Paaren angeben, wird ein Wörterbuch mit diesen Schlüsselwerten erstellt.So dict(checks=50) Ergebnisse in:

{'checks':50} 

und dict(algorithm = FLANN_INDEX_KDTREE, trees = 5) entspricht:

{'algorithm' : FLANN_INDEX_KDTREE, 'trees' : 5) 

In der Tat, wenn Sie eine Funktion, um eine Liste der explizit benannten Argumente füttern, können Sie erhalten, sie mögen:

def func (**kwargs): 
    #... 
    pass 

Wenn Sie jetzt func mit func(foo=4,bar='a') anrufen, wird kwargs wie folgt aussehen:

{'foo':4,'bar:'a'} 
0

In der Zeile

index_params = dict(algorithm = 0, trees = 5) 

algorithm und trees sind die Schlüssel.

Das resultierende Wörterbuch sieht wie folgt aus:

{'algorithm': 0, 'trees': 5} 
0

Dies wird erwähnt, tatsächlich in der documentation:

Wenn Keyword-Argumente übergeben werden, die Schlüsselwort-Argumente und ihre Werte werden dem Wörterbuch erstellt aus dem Positionsargument. Wenn ein hinzugefügter Schlüssel bereits vorhanden ist, ersetzt der Wert aus dem Schlüsselwortargument den Wert aus dem Positionsargument.

[...]

zu erläutern, werden die folgenden Beispiele alle Rück ein Wörterbuch gleich {"one": 1, "two": 2, "three": 3}:

a = dict(one=1, two=2, three=3) 
b = {'one': 1, 'two': 2, 'three': 3} 
c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) 
d = dict([('two', 2), ('one', 1), ('three', 3)]) 
e = dict({'three': 3, 'one': 1, 'two': 2}) 

So Ihr Beispiel entspricht:

index_params = {'algorithm': FLANN_INDEX_KDTREE, 'trees': 5} 
search_params = {'checks': 50} 
0

Dies ist eine alternative Syntax zum Einrichten von Schlüssel-, Wert-Paaren. Zum Beispiel ist in index_params Algorithmus ein Schlüssel und FLANN_INDEX_KDTREE ist ein Wert.

0

gibt drei gleichwertige Möglichkeiten, um einen Wörterbuch in Python zu konstruieren:

direkt (die bekannteste Art und Weise)

data = {'a': 1, 'b': 2} 

von Sequenz

data = dict([('a', 1), ('b', 2)]) 

oder von benannten Argumenten (nur wenn die Schlüssel Zeichenfolgen sind)

data = dict(a=1, b=2) 

Ihr Beispiel verwendet nur den letzten Ansatz

+0

Sie sollten erklären, welche Schlüssel als Zeichenfolgen betrachtet werden – vaultah