Python中如何检查一个浮点数是否为字典的键

3
我有一个像这样的字典:tmp_dic = {'0.0':'val0','1':'val1','key3':'val2'}。现在,在解析文件时,我想检查例如1.0的浮点值是否在tmp_dic的键中?我有一个简单的逻辑,但似乎有时候会返回错误的答案。
str(int(1.0)) in tmp_dic.keys()

在检查数字字符串是否存在于键中之前,我需要检查它们是否为整数或浮点数吗?感谢提示。


这取决于你是否希望将浮点数和整数字符串表示视为相等? - yatu
你所说的“有时候错误”的意思是什么?另外,不要使用in tmp_dic.keys(),而应该使用in tmp_dic,它们的作用相同,但后者更加高效。 - Mark Ransom
1个回答

1
你可以使用:

def gen_float(l):
    for f in l:
        try:
            yield float(f)
        except ValueError:
            pass
any(v == 1.00 for v in gen_float(tmp_dic.keys()))

输出:

True

最好将您的键转换为浮点数,而不是将您的检查浮点数转换为int或字符串。例如,如果您的检查浮点数为1.23,则会被转换为1。
或者您可以使用:
1.0 in gen_float(tmp_dic.keys())

正如@HeapOverflow所建议的那样


在创建tmp_dict时,如果将键转换为浮点数,则在字典中搜索float的时间复杂度将为O(1),这样会更好。


如果您没有像'1.0000'这样的字符串,您也可以使用以下内容:

str(1.0) in tmp_dict or str(int(1.0)) in tmp_dict

在字典中进行线性搜索有点失去了使用字典的初衷。 - Mark Ransom
@MarkRansom 如果 OP 可能有 '1.00' 或 '1.00000',那么线性方法是一个好的方法。 - kederrac
不,线性方法并不是一个好的选择,它速度较慢。如果您想这样做,拥有一个键值对list会更加高效。更好的方法是使键具有一致的格式,以便等效的键始终匹配。 - Mark Ransom
使用浮点数作为字典键也不是一个好主意,参见 https://dev59.com/G3RB5IYBdhLWcg3wj36c。 - Mark Ransom
@kederrac- 非常感谢。那个方法可行。你说得对,我只有一个小数位。 - Alex Man
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接