我编写此代码作为字符串列表中的简单搜索引擎,如下例所示:
Company: Value
XYZ Incorperated 25
XYZ Company 40
XYZ 12
ABC INC. 39
ABC inc. 10
ABC COMPANY 15
但我经常收到错误
mii(['hello world','hello','hello cat','hellolot of cats']) == {'hello': {0, 1, 2}, 'cat': {2}, 'of': {3}, 'world': {0}, 'cats': {3}, 'hellolot': {3}}
我该如何解决?
'dict' object has no attribute 'add'
答案 0 :(得分:5)
在Python中,当您将对象初始化为word = {}
时,您正在创建一个dict
对象而不是set
对象(我假设它是您想要的)。要创建集合,请使用:
word = set()
你可能对Python的Set Comprehension感到困惑,例如:
myset = {e for e in [1, 2, 3, 1]}
导致set
包含元素1,2和3.类似Dict理解:
mydict = {k: v for k, v in [(1, 2)]}
会生成一个包含键值对1: 2
的字典。
答案 1 :(得分:0)
def mii(strlist):
word_list = {}
for index, str in enumerate(strlist):
for word in str.split():
if word not in word_list.keys():
word_list[word] = [index]
else:
word_list[word].append(index)
return word_list
print mii(['hello world','hello','hello cat','hellolot of cats'])
输出:
{'of': [3], 'cat': [2], 'cats': [3], 'hellolot': [3], 'world': [0], 'hello': [0, 1, 2]}
我认为这就是你想要的。
答案 2 :(得分:0)
我在你的功能中看到很多问题 -
在Python中{}
是一个空字典,而不是一个集合来创建一个集合,你应该使用内置函数set()
。
if条件 - if str2 in word==False:
由于操作符链接而永远不会为True,它将转换为 - if str2 in word and word==False
,示例显示此行为 -
>>> 'a' in 'abcd'==False
False
>>> 'a' in 'abcd'==True
False
在行 - for (n,m) in list(enumerate(strlist))
- 你不需要将enumerate()
函数的返回值转换为list,你可以迭代它的返回值(直接是迭代器)
设置没有任何顺序感,当你这样做时 - zip(word,index)
- 无法保证元素按照你想要的正确顺序压缩(因为它们没有任何顺序感在所有)。
请勿将str
用作变量名称。
鉴于此,你最好从一开始就直接创建字典,而不是设置。
代码 -
def mii(strlist):
word={}
for i, s in enumerate(strlist):
for s2 in s.split():
word.setdefault(s2,set()).add(i)
return word
演示 -
>>> def mii(strlist):
... word={}
... for i, s in enumerate(strlist):
... for s2 in s.split():
... word.setdefault(s2,set()).add(i)
... return word
...
>>> mii(['hello world','hello','hello cat','hellolot of cats'])
{'cats': {3}, 'world': {0}, 'cat': {2}, 'hello': {0, 1, 2}, 'hellolot': {3}, 'of': {3}}
答案 3 :(得分:0)
x = [1、2、3]是创建列表(可变数组)的文字。
x = []创建一个空列表。
x =(1、2、3)是创建元组(常量列表)的文字。
x =()创建一个空元组。
x = {1,2,3}是创建集合的文字。
x = {}令人困惑地创建了一个空字典(哈希数组),而不是一个集合,因为字典首先出现在python中。
使用
x = set()创建一个空集。
还请注意
x = {“ first”:1,“ unordered”:2,“ hash”:3}是一个文字,它创建了一个字典,只是用来混合内容。