У меня есть list
из tuples
:
for i, item in enumerate(tags_and_weights):
tags = item[0]
weight = item[1]
, который печатает:
1 (['alternative country', 'alternative pop', 'alternative rock', 'art rock', 'brill building pop', 'country rock', 'dance rock', 'experimental', 'folk', 'folk rock', 'garage rock', 'gbvfi', 'indie rock', 'jangle pop', 'lo-fi', 'melancholia', 'noise pop', 'post-punk', 'power pop', 'protopunk', 'psychedelic rock', 'pub rock', 'rock', 'roots rock', 'slow core'], 3)
2 (['funk', 'soul'], 4)
3 (['folk-pop', 'new americana'], 2)
4 ([], 4)
5 (['alternative pop', 'boston rock', 'lilith', 'melancholia'], 2)
6 (['acoustic pop', 'chamber pop', 'folk-pop', 'indie folk', 'indie pop', 'modern rock', 'neo mellow', 'new americana', 'stomp and holler'], 7)
7 (['slow core'], 3)
8 (['alternative rock', 'art rock', 'britpop', 'dance rock', 'electronic', 'madchester', 'new romantic', 'new wave', 'new wave pop', 'permanent wave', 'post-punk', 'rock', 'synthpop', 'uk post-punk'], 4)
9 (['funk', 'neo soul', 'soul'], 6)
10 (['blues-rock', 'classic rock', 'psychedelic rock', 'rock'], 2)
item[0]
соответствует song (с которой связано много тегов).
item[1]
соответствует числу появлений песен .
Однако мне нужно общее количество по тегам, а не по песне.
Теперь я могу выделить плоские теги в списке следующим образом:
def flatten(list):
for sublist in list:
for item in sublist:
yield item
only_tags = [i[0] for i in tags_and_weights]
tags = list(flatten(only_tags))
, а затем, с помощью pandas
, быстро подсчитать их:
import pandas as pd
pd.Series(tags).value_counts()
но потом я теряю вес каждого тега ... и общее количество тегов искажается.
Учитывая, что я буду выполнять эти вычисления с гораздо большими списками, каков наиболее эффективный способ подсчета всех тегов, отслеживания веса тегов, а затем умножения каждого счета на него, чтобы получить окончательный результат?считать по тегу?