index = []
def add_to_index(index,keyword,url):
if len(index) == 0:
index.append([keyword, [url]])
elif keyword in index:
find_key_pos = index.find(keyword)
index.insert(find_key_pos + len(keyword), url)
add_to_index(index,'udacity','http://udacity.com')
add_to_index(index,'udacity','http://npr.org')
print(index)
我的输出是:
[['udacity', ['http://udacity.com']]]
实际上输出必须是
[['udacity', ['http://udacity.com', 'http://npr.org']]
每当索引列表中已经存在关键字时,我只需将URL插入到关键字旁边的列表中即可。 在,
add_to_index(index,'udacity','http://udacity.com')
add_to_index(index,'udacity','http://npr.org')
关键字“ udacity”是相同的,这就是为什么我应该在该关键字之后添加不同的url。
答案 0 :(得分:1)
您的错误:
index.insert(find_key_pos + len(keyword), url)
list.insert()
的第一个参数是新元素的索引。实际上,您实际上只想获取关键字列表,然后将新的URL附加到嵌套列表中。
您想要的是:
index[find_key_pos].append(url)
第二个错误在于重复使用index
变量。您的功能参数正在从父作用域隐藏列表。使用不同的名称。您的代码将起作用,因为列表是可变的,并且您传递了对同一列表的引用,但这会在以后造成很多混乱。
但是您真正应该做的是您应该查找Python字典。他们提供了开箱即用的关键字功能。
这是一个小的dict包装器,可以使您的生活更轻松:
class ListDict():
def __init__(self):
self.index = ()
def addEntry(self, key, entry):
if key in self.index:
self.index[key].append(entry)
else:
self.index[key] = [entry]
def getEntries(self, key):
if key in self.index:
return self.index[key]
else:
return []
用法:
websiteUrls = ListDict()
websiteUrls.addEntry("udemy", "foo")
websiteUrls.addEntry("udemy", "bar")
websiteUrls.getEntries("udemy")
# ["foo", "bar"]
websiteUrls.getEntries("nope")
# []