Ich versuche, einen Code zu schreiben, der den gierigen Algorithmus repliziert, und dafür muss ich sicherstellen, dass meine Berechnungen den höchstmöglichen Wert verwenden. Potenzielle Werte werden in einem Wörterbuch dargestellt. Mein Ziel ist es, zuerst den größten Wert zu verwenden und dann zu niedrigeren Werten überzugehen. Da Wörterbuchwerte jedoch nicht sequenziert werden, erhalte ich in der for-Schleife unorganisierte Sequenzen. Zum Beispiel würde die Ausgabe des folgenden Codes bei 25 beginnen.

Wie kann ich sicherstellen, dass mein Code ein Wörterbuch verwendet und dennoch der Reihenfolge (500,100,25,10,5) folgt?

a={"f":500,"o":100,"q":25,"d":10,"n":5}  
for i in a:
    print a[i]
1
Lorientas 12 Aug. 2015 im 17:11

3 Antworten

a={"f":500,"o":100,"q":25,"d":10,"n":5}
k = sorted(a, key=a.__getitem__, reverse=True)
v = sorted(a.values(), reverse=True)
sorted_a = zip(k,v)
print (sorted_a)

Ausgabe:

[('f', 500), ('o', 100), ('q', 25), ('d', 10), ('n', 5)]
-1
Joe T. Boka 12 Aug. 2015 im 14:21

Sie können dies verwenden

>>> a={"f":500,"o":100,"q":25,"d":10,"n":5}
>>> for value in sorted(a.itervalues(),reverse=True):
...     print value
... 
500
100
25
10
5
>>> 
1
chandu 12 Aug. 2015 im 14:26

Wörterbücher geben ihre Schlüssel ab, wenn Sie sie normal iterieren. Sie können jedoch die Elemente verwenden. ) anzeigen, um Tupel des Schlüssels und des Werts abzurufen. Das wird nicht bestellt, aber Sie können dann sorted () auf dem "ein-ten" Element der Tupel (dem Wert) mit umgekehrter Einstellung auf True:

a={"f":500,"o":100,"q":25,"d":10,"n":5}  
for k, v in sorted(a.items(), key=operator.itemgetter(1), reverse=True):
    print(v)

Ich vermute, dass Sie die Schlüssel tatsächlich benötigen, aber wenn nicht, können Sie einfach values() anstelle von items() verwenden: sorted(a.values(), reverse=True)

3
LexyStardust 12 Aug. 2015 im 15:13