2012-04-14 10 views
0

Wie kann ich String in ganzen Zahlen in diesem Wörterbuch dann Schleife durch sie, ohne sich Fehler wie ungültig wörtliche für int() mit Basis 10 :(Wie konvertiere ich String in Integer in diesem Wörterbuch und durchlaufe es dann?

mydict = {('6.0', '1.0'): '345.2', ('3.0', '9.0'): '632.7', 
    ('2.0', '3.0'): '222.4', ('1.0', '4.0'): '672.1', ('8.0', '6.0'): '822.6', 
    ('3.0', '8.0'): '225.5', ('7.0', '7.0'): '534.0', ('4.0', '7.0'): '599.3', 
    ('8.0', '9.0'): '273.5', ('5.0', '3.0'): '822.5', ('4.0', '2.0'): '326.6'} 

, in dem (key1, key2): value

Ich würde auch konvertieren durch dieses Wörterbuch wie eine Schleife, und berechnen dieser Formel ...

((key1 * 360/key2 * 180) + value) 

für jedes Schlüsselpaar. Dann würde ich aus dem 3 größten Wert r drucken entstand aus der Berechnung. Ist das möglich?

+0

Ja, es ist möglich, aber wir werden den gesamten Code für Sie nicht schreiben. Sie müssen zeigen, dass Sie es selbst versucht haben. Das nächste Mal, fügen Sie Ihr aktuelles 'dict' in Ihre Frage ein, und Sie werden nicht nachfragen müssen - alle Strings in den Schlüsseln in Ihrem ursprünglichen Post enthielten' int's, nicht 'float's. – agf

Antwort

1

Sie können folgendes tun:

res = map(lambda x: (float(x[0][0]) * 360.)/(float(x[0][1]) * 180.) + float(x[1]), mydict.items()) 

, dass so etwas produzieren:

[357.2, 633.37] 

Um die 3 größten:

sorted(res, reverse=True)[0:3] 

Hoffnung, das hilft.

4

Convert zweimal.

>>> int('1.0') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '1.0' 
>>> int(float('1.0')) 
1 
2

Versuchen Sie, die folgende Implementierung

>>> calc_list=(int(float(a))*360/int(float(b))*180+int(float(v)) 
    for (a,b),v in mydict.iteritems()) 
>>> print '\n'.join(map(str,heapq.nlargest(3,calc_list))) 
389145 
129926 
108822 
>>> 
Verwandte Themen