第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算列表中最常見的項目與字典值列表交叉檢查

計算列表中最常見的項目與字典值列表交叉檢查

慕無忌1623718 2023-10-11 21:15:59
我有一本字典Songs,以歌曲為鍵,以歌曲的情緒為值。我還有一本Users字典,里面有聽過的歌曲。我現(xiàn)在想檢查字典中的哪些情緒Songs對每個用戶來說最流行,并將這些情緒放入一個新的字典中,將用戶與該情緒耦合起來。這就是我現(xiàn)在所擁有的:from collections import CounterSongs = {    'Song1' : ['techno', 'upbeat'],    'Song2' : ['rock', 'upbeat'],    'Song3' : ['pop', 'sad'],    'Song5' : ['pop', 'calm'],    'Song6' : ['rap', 'upbeat'],    'Song7' : ['rock', 'sad']}Users = {    'User1' : ['Song1', 'Song2', 'Song6'],    'User2' : ['Song3', 'Song7'],    'User3' : ['Song2', 'Song7']}Users_moods = dict.fromkeys(Users)for user, song in Users.items():    for song, mood in Songs.items():        mood = set(mood)        mood_counter = Songs[song]Users_moods = {user: counter.most_common(1)[0][0] for user, counter in Users.items()}print(Users_moods)print(Songs)print(Users)但它給了我錯誤。Users_mood對于此示例,字典應(yīng)如下所示:Users_moods = {    'User1' : 'upbeat',    'User2' : 'sad',    'User3' : 'rock'}
查看完整描述

3 回答

?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

def getMoods(user, users, songs):

    userSongs = users[user]  # songs this user listens to

    moods = {}  # count of each mood this user listens to

    for song in userSongs:

        for mood in songs[song]:  # for each mood of that song

            moods.setdefault(mood, 0)

            moods[mood] += 1

    return max(moods, key=moods.get)  # the most prevalent mood



for user in users:

    print(user, 'likes', getMoods(user, users, songs))  # mood with the highest count


查看完整回答
反對 回復 2023-10-11
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

您實際上并沒有使用Counter并嘗試調(diào)用most_common列表。讓我們嘗試將其分解:

  1. 創(chuàng)建一個新字典,并為每個用戶找到其相關(guān)的情緒(總體)。

  2. 從該詞典中找到每個用戶最常見的情緒。

為了更好地處理 1,我們可以使用defaultdict

from collections import Counter, defaultdict


Users_moods = defaultdict(list)


for user, songs in Users.items():

? ? for song in songs:

? ? ? ? Users_moods[user].extend(Songs[song])


common_moods = {user: Counter(moods).most_common(1)[0][0] for user, moods in Users_moods.items()}


print(Users_moods)

print(common_moods)

這給出:


defaultdict(<class 'list'>, {'User1': ['techno', 'upbeat', 'rock', 'upbeat', 'rap', 'upbeat'], 'User2': ['pop', 'sad', 'rock', 'sad'], 'User3': ['rock', 'upbeat', 'rock', 'sad']})

{'User1': 'upbeat', 'User2': 'sad', 'User3': 'rock'}

common或者,您可以使用相同的循環(huán)動態(tài)構(gòu)建字典,為Counter每個用戶創(chuàng)建一個單獨的字典:


common_moods = {}


for user, songs in Users.items():

? ? User_moods = Counter()

? ? for song in songs:

? ? ? ? User_moods += Counter(Songs[song])

? ? common_moods[user] = User_moods.most_common(1)[0][0]


print(common_moods)


查看完整回答
反對 回復 2023-10-11
?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

如果您打算使用 collections.Counter,讓我們看看https://docs.python.org/3/library/collections.html#collections.Counter您將需要

mood_counter = Counter(iterable)

據(jù)推測,這里的可迭代來自于查看一個用戶,然后是他們的所有歌曲,然后是這些歌曲的所有情緒。我們不要嘗試制作一個襯墊,而是正常地迭代這些襯墊。

def get_user_mood(user, Users, Songs):

    accumulated_moods = []

    for song_name in Users[user]:

        moods_for_this_song = Songs[song_name]

        accumulated_moods.extend(moods_for_this_song)


    mood_counter = Counter(accumulated_moods)

    return mood_counter.most_common(1)[0][0] # validate?

這使您可以在理解中相當輕松地構(gòu)建字典


Users_moods = {user: get_user_mood(user, Users, Songs) for user in Users}


查看完整回答
反對 回復 2023-10-11
  • 3 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號