2016-12-29 3 views
-2
def insert(key, value, D, hasher = hash): 

    x = hash(key) 
    key_value = (x, key, value) 
    D.append(key_value) 
    sorted(D, key = lambda x:x[0]) 
    return D 

insert("swag", 100, D, hash) 

insert("swg", 150, D, hash) 

print(D) 

scheint nie sortiert werden,Sortieren einer Liste von Tupeln von einem bestimmten Element in einem Tupel

Ich möchte

+1

Haben Sie nicht, dass die Verwendung 'Hasher (key)' statt 'hash (key) '. Andernfalls verwenden Sie die Hash-Funktion Hashing immer unabhängig vom angegebenen Argument. –

Antwort

4

Sie die Sortierung der Liste die Liste über den x-Wert sortieren und sofort die sortierte Liste wegwerfen. Beachten Sie, dass sorted eine neue Liste zurückgibt, so dass Sie auch die sortierte Liste auf den Namen neu zuweisen müssen.

... 
return sorted(D, key=lambda x:x[0]) 

in-place zu sortieren, die Art Methode der Liste verwenden: D.sort

def insert(key, value, D, hasher = hash): 
    ... 
    D.sort(key=lambda x:x[0]) 
+3

Auch 'key = lambda x: x [0]' ist ziemlich sinnlos, da es nach 'key [0]' sowieso sortiert. Dies entfernt nur den Tie-Breaker. –

+0

Danke, mit dieser –

+0

@ayydoe Dann können Sie in Betracht ziehen, die Antwort zu akzeptieren :) –

1

Sie haben verwirrt und Art sortiert. sortiert ist eine Funktion, die das ursprüngliche iterable allein lässt, aber gibt einen sortierten Artikel zurück. Sie haben diesen Wert nicht gespeichert. Versuchen Sie folgendes:

return sorted(D, key = lambda x:x[0]) 

Beispiel

def insert(key, value, D, hasher = hash): 

    x = hash(key) 
    key_value = (x, key, value) 
    D.append(key_value) 
    print D 
    D.sort() 
    return D 


D = [] 
insert("swag", 100, D, hash) 
insert("swg", 150, D, hash) 
insert("loot", 200, D, hash) 
insert("crud", 50, D, hash) 

print(D) 

Ausgang:

[(-1840385907632881630, 'swag', 100)] 
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150)] 
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5971043325587305850, 'loot', 200)] 
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5971043325587305850, 'loot', 200), (5473401298224946764, 'crud', 50)] 
[(-1840385907632881630, 'swag', 100), (-369175422006790866, 'swg', 150), (5473401298224946764, 'crud', 50), (5971043325587305850, 'loot', 200)] 
+0

Ich tat das, und es hat immer noch nicht funktioniert, es gab immer noch diese Ausgabe –

+0

[(6465318664160753506, 'swag', 100), (- 1220143650632114200, 'swg', 150)] –

+0

@ayydoe Bitte zeige * genau * was du gemacht hast. 'sortiert ([(6465318664160753506, 'swag', 100), (-1220143650632114200, 'swg', 150)], Schlüssel = Lambda x: x [0])' returns '[(-1220143650632114200, 'swg', 150) , (6465318664160753506, 'Swag', 100)] ', wie erwartet. – ThisSuitIsBlackNot

Verwandte Themen