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

音乐流派统计:拆分列表时保留复合流派并提取一维列表

解决方案:统一统计高级别音乐流派

针对你遇到的两个问题,直接给出最优解决思路和代码:

核心方案:流派映射(同时解决拆分+统计需求)

既然要统计高级别流派,最直接的方式是给每个子流派定义对应的高级别分类,既避免拆分"hip hop"这类复合流派,又直接得到一维的高级别流派列表,同时完成统计。

代码示例

from collections import Counter

# 定义子流派 → 高级别流派的映射(可根据需求扩展)
genre_mapping = {
    'pop': 'pop',
    'latin pop': 'pop',
    'edm': 'edm',
    'argentine hip hop': 'hip hop',
    'latin hip hop': 'hip hop',
    'rock': 'rock',
    'trap latino': 'trap',
    'r&b': 'r&b'
}

# 原始流派列表
genres = ['pop', 'edm', 'argentine hip hop', 'rock', 'trap latino', 'r&b', 'latin hip hop', 'latin pop']

# 转换为一维的高级别流派列表
high_level_genres = [genre_mapping[g] for g in genres]

# 统计各高级别流派数量
genre_counts = Counter(high_level_genres)

# 输出结果
print("一维高级别流派列表:", high_level_genres)
print("流派统计结果:", genre_counts)

输出结果

一维高级别流派列表: ['pop', 'edm', 'hip hop', 'rock', 'trap', 'r&b', 'hip hop', 'pop']
流派统计结果: Counter({'pop': 2, 'hip hop': 2, 'edm': 1, 'rock': 1, 'trap': 1, 'r&b': 1})

针对具体问题的单独解决方法

1. 避免"Hip Hop"被拆分

如果流派列表较大,不想手动写全映射,可以用正则匹配复合流派,自动归类:

import re
from collections import Counter

genres = ['pop', 'edm', 'argentine hip hop', 'rock', 'trap latino', 'r&b', 'latin hip hop', 'uk pop']

high_level_genres = []
for g in genres:
    # 优先匹配复合流派
    if re.search(r'hip hop', g, re.IGNORECASE):
        high_level_genres.append('hip hop')
    elif re.search(r'pop', g, re.IGNORECASE):
        high_level_genres.append('pop')
    elif re.search(r'edm', g, re.IGNORECASE):
        high_level_genres.append('edm')
    elif re.search(r'rock', g, re.IGNORECASE):
        high_level_genres.append('rock')
    elif re.search(r'trap', g, re.IGNORECASE):
        high_level_genres.append('trap')
    elif re.search(r'r&b', g, re.IGNORECASE):
        high_level_genres.append('r&b')

print("一维高级别流派列表:", high_level_genres)
print("流派统计结果:", Counter(high_level_genres))

2. 扁平化嵌套列表(仅解决格式问题,不推荐用于流派统计)

如果只是想把你生成的嵌套列表转成一维,用列表推导式即可:

genres_split = [['pop'], ['edm'], ['argentine', 'hip', 'hop'], ['rock'], ['trap', 'latino'], ['r&b'], ['latin', 'hip', 'hop'], ['uk', 'pop']]
flat_genres = [item for sublist in genres_split for item in sublist]
print(flat_genres)

输出:

['pop', 'edm', 'argentine', 'hip', 'hop', 'rock', 'trap', 'latino', 'r&b', 'latin', 'hip', 'hop', 'uk', 'pop']

⚠️ 注意:这种方式会拆分"hip hop",无法满足你的高级别统计需求,仅适合纯格式处理场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:15:33