0

この辞書で文字列を整数に変換し、10を底とするint()の無効なリテラルなどのエラーを取得せずにループする方法を教えてください:(

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'}

その中で(key1, key2): value

また、この辞書をループして、この式を使用して計算したいと思います...

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

キーペアごとに。次に、計算結果の最大3つの値を出力します。これは可能ですか?

4

3 に答える 3

4

2回変換します。

>>> 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
于 2012-04-14T05:12:17.840 に答える
2

次の実装を試してください

>>> 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
>>> 
于 2012-04-14T05:47:01.570 に答える
1

次のことができます。

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

それは次のようなものを生成します:

[357.2, 633.37]

最大の3つを取得するには:

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

お役に立てば幸いです。

于 2012-04-14T05:22:45.557 に答える