如何在有多个lemen的值列表的字典中搜索

2024-06-16 10:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的家庭作业问题,这个问题给了我一本字典,让我查字典。这是字典:

{"childrens": [
    ["Be Our Guest", "Angela Lansbury", 224, 0],
    ["Lullabye", "Billy Joel", 213, 0]],
"dance": [
    ["Happy Now", "Kygo", 211, 0],
    ["Grapevine", "Tiesto", 150, 0],
    ["Headspace", "Dee Montero", 271, 0]],
"blues": [
    ["Dream of Nothing", "Bob Margolin", 208, 0]
    ["Rock and Stick", "Boz Scaggs", 290, 0],
    ["At Last", "Etta James", 181, 0],
    ["You’re Driving Me Crazy", "Van Morrison", 286, 0]],
"kpop": [
    ["Not That Type", "gugudan", 191, 0],
    ["IDOL", "BTS", 222, 0],
    ["Believe Me", "Seo In Young", 191, 0],
    ["Baam", "MOMOLAND", 208, 0],
    ["Hide Out", "Sultan of the Disco", 257, 0]]
}

按键是“childrens”、“dance”、“blues”和“kpop”。但问题是,值列表包含多个元素。有整数和字符串两种类型。值列表中的第一项是宋的名字,第二项是艺术家的名字。所以我被要求在字典里搜索这位艺术家,然后把这首歌还给他。下面是我的代码

def getSongsByArtist(library, artist):
value = []
value = library.values()
result = []
for sublist in value:
    for item in sublist:
        if item == artist:
            result.append(sublist[0])
return result

我应该得到“最后”的输出,但由于某种原因,我的输出是“没有梦想”,我不明白为什么


Tags: of列表字典artistvaluelibraryresult名字
2条回答

试试这个

result = []
for sublist in library:
    for item in library[sublist]:
        if item[1] == artist:
           result.append(item[0])        
print(result)

子列表将为您提供所有字典键。使用它可以获取item变量中的值

您可以尝试使用以下一行:

def getSongsByArtist(library, artist):
    return [s[0] for l in library.values() for s in l if s[1] == artist]

或者以另一种形式:

def getSongsByArtist(library, artist):
    # Set up return list
    rv = []
    # Loop over lists of lists in dictionary values
    for l in library.values():
        # For each sublist:
        for s in l:
            # if the artist is correct
            if s[1] == artist:
                # append the track to the return list
                rv.append(s[0])
    return rv

用法:

>>> getSongsByArtist(library, 'Billy Joel')
['Lullabye']

相关问题 更多 >