3 回答

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

TA貢獻1846條經(jīng)驗 獲得超7個贊
您實際上并沒有使用Counter
并嘗試調(diào)用most_common
列表。讓我們嘗試將其分解:
創(chuàng)建一個新字典,并為每個用戶找到其相關(guān)的情緒(總體)。
從該詞典中找到每個用戶最常見的情緒。
為了更好地處理 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)

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}
添加回答
舉報