You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含嵌套字典与列表的字典中根据track的name获取对应uri

问题

我有一个嵌套字典结构,里面包含多个专辑条目,每个专辑下的name列表和uri列表顺序完全对应。现在需要写一个函数,遍历这个字典,根据给定的曲目名称,返回对应的uri值。比如搜索名称为Marionette时,应返回spotify:track:7K79eftHsp3THzMzKAvdwf。

示例数据如下:

music_data = {
    'spotify:album:1fZZFPgIGWwGLGdaBtfTB2': {
        'album': ['Bloom'] * 11,
        'track_number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
        'id': ['7K79eftHsp3THzMzKAvdwf', '50p5GVTOaUwS24rDGj6Nvv', '1wX0mdaFOVF7QSxh3oMZFu', '6EgjqSpLfGLYAY8xJKS3oI', '21FWZSYUk3HucbogowQkL3', '4I2Xc5VoEHKILATMeRPcAR', '22Fwp9jLBVF25Zt0NKwjgO', '0MoASguy3Rqj6go8yjyXDG', '3yY8DTJHs0rjXi0sgc7oVD', '2ntYoR04fzRYAOoowJzuod', '4AYe20dLcciEY7uhjnxpjp'],
        'name': ['Marionette', 'WILDSIDE', 'SAPPY', 'Jackpot', '#Cookie Jar', 'Snap Snap', 'Sayonara', 'Aitai-tai', 'Swimming Pool', "'Cause it's you", 'Color of Love'],
        'uri': ['spotify:track:7K79eftHsp3THzMzKAvdwf', 'spotify:track:50p5GVTOaUwS24rDGj6Nvv', 'spotify:track:1wX0mdaFOVF7QSxh3oMZFu', 'spotify:track:6EgjqSpLfGLYAY8xJKS3oI', 'spotify:track:21FWZSYUk3HucbogowQkL3', 'spotify:track:4I2Xc5VoEHKILATMeRPcAR', 'spotify:track:22Fwp9jLBVF25Zt0NKwjgO', 'spotify:track:0MoASguy3Rqj6go8yjyXDG', 'spotify:track:3yY8DTJHs0rjXi0sgc7oVD', 'spotify:track:2ntYoR04fzRYAOoowJzuod', 'spotify:track:4AYe20dLcciEY7uhjnxpjp']
    },
    'spotify:album:3rVtm00UfbuzWOewdm4iYM': {
        'album': ['‘The ReVe Festival’ Finale'] * 16,
        'track_number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
        'id': ['3CYH422oy1cZNoo0GTG1TK', '2iYnEfKsAsE86Yb9mS4b3E', '2m9K7KlDOQ0NXk9xBpkuoZ', '5vdqSjUj9JZsAHdr02Vygk', '1wpAS4Jm9ElkOJjnyDX4Tm', '3q21kVfUIdkzqYpzBCbojN', '12okmCNziVZkDIcEOx0SD9', '2KqYLFNTX2HXzYH4bucBKa', '0HFa5Rr2x5iwqIvGTMqif6', '7gs7h249FMYC3U02BimoD6', '3lZHJ90cpbtLCyJNzL39Pb', '0tHkBl71ZHXaFdc0sNGQHz', '65ZHlbTuPrZggbmYCVjPL4', '782QoB4jJ7hEVJmkYzVrRE', '2cvi3IRTibXzmAm4f8P2HP', '1O7qPyMtudzP3APaOT2OTH'],
        'name': ['Psycho', 'In & Out', 'Remember Forever', 'Eyes Locked, Hands Locked', 'Ladies Night', "Jumpin'", 'Love Is The Way', 'Carpool', 'Umpah Umpah', 'LP', 'Parade', 'Bing Bing', 'Milkshake', 'Sunny Side Up!', 'Zimzalabim', 'La Rouge - Special Track'],
        'uri': ['spotify:track:3CYH422oy1cZNoo0GTG1TK', 'spotify:track:2iYnEfKsAsE86Yb9mS4b3E', 'spotify:track:2m9K7KlDOQ0NXk9xBpkuoZ', 'spotify:track:5vdqSjUj9JZsAHdr02Vygk', 'spotify:track:1wpAS4Jm9ElkOJjnyDX4Tm', 'spotify:track:3q21kVfUIdkzqYpzBCbojN', 'spotify:track:12okmCNziVZkDIcEOx0SD9', 'spotify:track:2KqYLFNTX2HXzYH4bucBKa', 'spotify:track:0HFa5Rr2x5iwqIvGTMqif6', 'spotify:track:7gs7h249FMYC3U02BimoD6', 'spotify:track:3lZHJ90cpbtLCyJNzL39Pb', 'spotify:track:0tHkBl71ZHXaFdc0sNGQHz', 'spotify:track:65ZHlbTuPrZggbmYCVjPL4', 'spotify:track:782QoB4jJ7hEVJmkYzVrRE', 'spotify:track:2cvi3IRTibXzmAm4f8P2HP', 'spotify:track:1O7qPyMtudzP3APaOT2OTH']
    }
}

解决方案

核心思路是利用name和uri列表的索引对应关系:找到目标名称在name列表中的位置,再取uri列表相同位置的值。

实现函数

def find_track_uri(music_data, track_name):
    # 遍历每个专辑
    for album in music_data.values():
        track_names = album.get('name', [])
        track_uris = album.get('uri', [])
        # 检查两个列表长度一致(避免数据异常)
        if len(track_names) != len(track_uris):
            continue
        # 查找目标名称的索引
        try:
            index = track_names.index(track_name)
            return track_uris[index]
        except ValueError:
            # 当前专辑没找到,继续下一个
            continue
    # 所有专辑都没找到,返回None或自定义提示
    return None

使用示例

# 搜索'Marionette'
print(find_track_uri(music_data, 'Marionette'))
# 输出: spotify:track:7K79eftHsp3THzMzKAvdwf

# 搜索'Psycho'
print(find_track_uri(music_data, 'Psycho'))
# 输出: spotify:track:3CYH422oy1cZNoo0GTG1TK

扩展说明

  • 如果存在同名曲目,函数会返回第一个匹配的uri;若需要返回所有匹配结果,可以修改函数收集所有符合条件的uri。
  • 加入了列表长度检查,避免因数据异常导致索引错误。
  • 未找到目标曲目时返回None,可根据需求改为抛出异常或返回提示字符串。

内容的提问来源于stack exchange,提问作者Precog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:30:56