TypeError: 类型为'float'的对象没有len(),difflib

3 投票
1 回答
4526 浏览
提问于 2025-04-18 05:47

我有一个函数,它使用字典中某个键的值。这个值是一个列表,我会遍历这个列表,把它和我的样本字符串进行比较。

for item in List1: #iterate over objects of list
    [l3,l4] = dict2[item] #this just assigns float values to l3,l4 (not needed)
    if ((distance(l1,l2,l3,l4)<200)and(difflib.SequenceMatcher(None, str1, item).ratio()>0.7)):  #error here , 
        str2 = item

distance 是一个函数,它接受四个浮点数 l1、l2、l3 和 l4,并返回一个浮点值。这部分没有问题。问题出在 difflib.SequenceMatcher(None, str1, item).ratio() 上。

这里是错误信息:

 TypeError                                 Traceback (most recent call last)
<ipython-input-27-441e1aa01c23> in <module>()
----> 1 BLR_data_test['modified_buildings'] = BLR_data_test['extracted_building'].apply(modify_building)

C:\Anaconda\lib\site-packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args, **kwds)
   2021             values = lib.map_infer(values, lib.Timestamp)
   2022 
-> 2023         mapped = lib.map_infer(values, f, convert=convert_dtype)
   2024         if len(mapped) and isinstance(mapped[0], Series):
   2025             from pandas.core.frame import DataFrame

C:\Anaconda\lib\site-packages\pandas\lib.pyd in pandas.lib.map_infer (pandas\lib.c:44780)()

<ipython-input-26-f11f38a90e26> in modify_building(str1)
      5     for item in List1:
      6         [l3,l4] = dict2[item]
----> 7         if ((distance(l1,l2,l3,l4)<200)and(difflib.SequenceMatcher(None, str1, item).ratio()>0.7)):
      8             str2 = item
      9             break

C:\Anaconda\lib\difflib.pyc in ratio(self)
    657 
    658         matches = reduce(lambda sum, triple: sum + triple[-1],
--> 659                          self.get_matching_blocks(), 0)
    660         return _calculate_ratio(matches, len(self.a) + len(self.b))
    661 

C:\Anaconda\lib\difflib.pyc in get_matching_blocks(self)
    479         if self.matching_blocks is not None:
    480             return self.matching_blocks
--> 481         la, lb = len(self.a), len(self.b)
    482 
    483         # This is most naturally expressed as a recursive algorithm, but

TypeError: object of type 'float' has no len() 

str1 是一个字符串,我把它和 item 进行比较。需要注意的是,item 是一个字符串列表。根据文档,difflib 的参数需要是可哈希的,而 item 没有唯一的哈希值。我该怎么避免这个问题呢?

1 个回答

4

把你的项目转换成字符串,这样做能达到你想要的效果吗?

difflib.SequenceMatcher(None, str1, str(item)).ratio()

这样做可以解决类型错误,但我不太明白你在这里具体想做什么,这样会不会改变你程序的行为。

撰写回答