0

如何在此字典中将字符串转换为整数,然后循环遍历它而不会出现错误,例如int() 以 10 为底的无效文字:(

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

转换两次。

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