資料集或說給定的字典是:
# A list of video reviews
# - Each review has the name of the video, the numer of views
# and a list of user reviews.
# - Each user review has the user's name and the review they gave
# to the video.
video_reviews = [
{
"name": "Cats doing nothing",
"number_of_views": 450743,
"reviews": [
{"name": "Jeb", "review": 5},
{"name": "Samantha", "review": 2},
{"name": "Crystal", "review": 3},
]
},
{
"name": "All Fail",
"number_of_views": 1239734,
"reviews": [
{"name": "Crystal", "review": 5},
{"name": "Frank", "review": 3},
{"name": "Jeb", "review": 3},
]
},
{
"name": "Runaway Nintendo",
"number_of_views": 48343,
"reviews": [
{"name": "Samantha", "review": 4},
{"name": "Bill", "review": 3},
{"name": "Sarah", "review": 4},
]
},
]
這是我的問題:我想定義一個函式并創建一個用戶摘要 - 一個字典 - 其中鍵是用戶的姓名,值是他們查看過的視頻串列。結果預計是這樣的:
{
"Jeb": ["Cats doing nothing", "All Fail"],
"Samantha": ["Cats doing nothing","Runaway Nintendo"],
"Crystal": ["Cats doing nothing", "All Fail"],
"Frank": ["All Fail"],
"Bill": ["Runaway Nintendo"],
"Sarah": ["Runaway Nintendo"],
}
目前,我的代碼是:
def create_user_summary(video_reviews):
summary = {}
for video in video_reviews:
for person in video["reviews"]:
user = person["name"]
video_name = []
if person["name"] == user:
video_name.append(video["name"])
summary[user] = video_name
return summary
AssertionError:
You returned:
{'Jeb': ['All Fail'], 'Samantha': ['Runaway Nintendo'], 'Crystal': ['All Fail'], 'Frank': ['All Fail'], 'Bill': ['Runaway Nintendo'], 'Sarah': ['Runaway Nintendo']}
instead of:
{'Jeb': ['Cats doing nothing', 'All Fail'], 'Samantha': ['Cats doing nothing', 'Runaway Nintendo'], 'Crystal': ['Cats doing nothing', 'All Fail'], 'Frank': ['All Fail'], 'Bill': ['Runaway Nintendo'], 'Sarah': ['Runaway Nintendo']}
如何修改我的代碼并讓輸出與預期匹配?
uj5u.com熱心網友回復:
這是您的代碼的修改版本,我認為它可以滿足您的需求:
def create_user_summary(video_reviews):
summary = {}
for video in video_reviews:
for person in video["reviews"]:
summary.setdefault(person["name"], []).append(video["name"])
return summary
結果”
{'Jeb': ['Cats doing nothing', 'All Fail'], 'Samantha': ['Cats doing nothing', 'Runaway Nintendo'], 'Crystal': ['Cats doing nothing', 'All Fail'], 'Frank': ['All Fail'], 'Bill': ['Runaway Nintendo'], 'Sarah': ['Runaway Nintendo']}
uj5u.com熱心網友回復:
您可以為此使用一些 python 內置函式,例如sortedandgroupby并將它們與 list 和 dict 理解粘合在一起:
from itertools import groupby
source = ((rev['name'], vid['name']) for vid in video_reviews for rev in vid['reviews'])
result = {k: list(m for _, m in g) for k, g in groupby(sorted(source), lambda x: x[0])}
print(result)
uj5u.com熱心網友回復:
你可以用defaultdict,
from collections import defaultdict
result = defaultdict(list)
for item in video_reviews:
for review in item['reviews']:
result[review['name']].append(item['name'])
print(dict(result))
結果:
{'Jeb': ['Cats doing nothing', 'All Fail'],
'Samantha': ['Cats doing nothing', 'Runaway Nintendo'],
'Crystal': ['Cats doing nothing', 'All Fail'],
'Frank': ['All Fail'],
'Bill': ['Runaway Nintendo'],
'Sarah': ['Runaway Nintendo']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521405.html
上一篇:如何將引數傳遞給函式內部的函式
下一篇:判斷人們是否靠近
