【发布时间】:2014-05-08 07:44:48
【问题描述】:
我有一个函数使用字典中键的值。该值是一个列表,我遍历该列表以将其与我的示例字符串进行比较。
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 是一个函数,它在输入 4 个浮点值 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 没有唯一的散列值。我怎么可能避免这种情况?
【问题讨论】:
-
你能显示完整的追溯吗?
-
您究竟希望
SequenceMatcher做什么?匹配一个字符串和一个浮点数不是一个定义明确的操作;更糟糕的是,将浮点数与任何内容匹配的序列都是错误的,因为浮点数不是序列(这是回溯告诉你的)。您想对浮点数的文本表示进行序列匹配吗? -
不,两者都是字符串。我不匹配浮点数
-
你是在争论解释器给出的回溯是错误的吗?当 python 解释器告诉您其中一项是
float类型时,您最好相信它。只需在if语句之前添加print type(str1), type(item)即可亲自查看。您应该始终相信口译员告诉您的内容。 -
这里是
。而且我不是在争论,如果你更有礼貌会更好。我知道我在做什么。
标签: python list python-2.7 dictionary difflib