如何在此字典中将字符串转换为整数然后循环它?

时间:2012-04-14 05:10:20

标签: python

如何在此字典中将字符串转换为整数,然后循环遍历它,而不会出现对于带有基数为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个最大值。这可能吗?

3 个答案:

答案 0 :(得分:4)

转换两次。

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

答案 1 :(得分: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
>>> 

答案 2 :(得分: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]

希望有所帮助。