私はこの問題に取り組んできましたが、非常に長い時間のようです。次のような辞書があります。
{'1': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,'The Night Listener': 3.0}, '2': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,'You, Me and Dupree': 3.5},'3': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,'Superman Returns': 3.5, 'The Night Listener': 4.0}}
実際にはもっと大きな問題ですが、私が見つけようとしているのは、少なくとも 2 つの映画が互いに共通している ID のペアのリストまたはセットです。しかし、何かが間違っているに違いありません。なぜなら、最初のキーは 2 番目のキーとチェックし、次に最初のキーと 3 番目のキーをチェックしなければならないからです。次に、3番目のキーの番です。
最後に、少なくとも 2 つの映画に共通するキーのみを取得したいと考えています。
私はこれをやってみました:
def sim_critics(movies):
similarRaters=set()
first=1
lastCritic= ''
movie_over = collections.defaultdict(list)
movCount=Counter(movie for v in movies.values() for movie in v)
for num in movies:
for movie, _ in movies[num].items():
movie_over[movie].append(num)
for critic,_ in movie_over.items():
if first!=1:
critic_List = collections.Counter(movie_over[critic])
critic2_list = collections.Counter(movie_over[lastCritic])
overlap = list((critic_List & critic2_list).elements())
if len(overlap) >= 2:
key = critic + " and " + lastCritic
similarRaters.add(key)
lastCritic= critic
first=2
return similarRaters