将元素追加到嵌套列表内的列表中-python

aks*_*pal 5 python list nested-lists

我正在开发过程add_to_index,它需要3个输入:

  • 索引:[[,[url1,url2,...]],...]
  • 关键字:字符串
  • 网址:字符串

如果关键字已经在索引中,则将url添加到与该关键字关联的url列表中。

如果关键字不在索引中,则索引中将包含一个新元素:

[keyword,[url]]
Run Code Online (Sandbox Code Playgroud)

index = []

def add_to_index(index,keyword,url):
    flag = 0
    count = 0
    for lists in index:
        count += 1
        if(lists[0]==keyword): 
            index[count][1].append(url)

    if(flag ==0):
        index.append([keyword,url])   

#calling the function below

add_to_index(index,'google','http://google.com')
print index
Run Code Online (Sandbox Code Playgroud)

输出-> [['google', 'http://google.com']]

add_to_index(index,'computing','http://acm.org')
print index
Run Code Online (Sandbox Code Playgroud)

输出-> [['google', 'http://google.com'], ['computing', 'http://acm.org']]

add_to_index(index,'google','http://gmail.com') 
print index
Run Code Online (Sandbox Code Playgroud)

错误->

index[count][1].append(url)
AttributeError: 'str' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

预期产量:

 [['google', ['http://google.com', 'http://gmail.com']], 
 ['computing', ['http://acm.org']]]
Run Code Online (Sandbox Code Playgroud)

Bha*_*Rao 3

您犯了三个错误,首先您没有使用flag,其次您将 url 添加为字符串。最后,正如Kaivosuketaja在评论中提到的那样,计数最终应该增加。也可以这样做

index = []

def add_to_index(index,keyword,url):
    flag = 0
    count = 0

    for lists in index:

        if(lists[0]==keyword): 
            flag = 1
            index[count][1].append(url)
        count += 1

    if(flag ==0):
        index.append([keyword,[url]])   
        # Take note of append away here
#calling the function below

add_to_index(index,'google','http://google.com')
print index

add_to_index(index,'computing','http://acm.org')
print index

add_to_index(index,'google','http://gmail.com') 
print index
Run Code Online (Sandbox Code Playgroud)

现在的输出是

[['google', ['http://google.com']]]
[['google', ['http://google.com']], ['computing', ['http://acm.org']]]
[['google', ['http://google.com', 'http://gmail.com']], ['computing', ['http://acm.org']]]
Run Code Online (Sandbox Code Playgroud)

  • @Kaivosukeltaja 如果您感觉不好,我很抱歉,但我花了三分钟写下您的名字,因为由于某些原因我无法复制和粘贴。:( .. (2认同)