2017-12-17 15 views
-1

ユーザー間の類似度を計算したいが空の辞書に値を追加することはできない。ここでPythonの反復で空のネストされた辞書に値を追加する方法

は私のコードです:

data={'Lisa Rose': {'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}, 
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 
'Just My Luck': 1.5, 'The Night Listener': 3.0}, 
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0, 
'Superman Returns': 3.5, 'The Night Listener': 4.0}, 
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 
'The Night Listener': 4.5, 'You, Me and Dupree': 2.5}, 
'Mick LaSalle': {'Just My Luck': 2.0, 'Lady in the Water': 3.0,'Superman 
Returns': 3.0, 'The Night Listener': 3.0, 'You, Me and Dupree': 2.0}, 
'Jack Matthews': {'Snakes on a Plane': 4.0, 'The Night Listener': 3.0, 
'Superman Returns': 5.0, 'You, Me and Dupree': 3.5}, 
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman 
Returns':4.0}} 

df = pd.DataFrame(data)` 

def usersimilarity(df): 
    w = dict() 
    for u in df.keys(): 
     for v in df.keys(): 
      if u == v: 
       continue 
      w[u][v] = 
    len(set(df[u])&set(df[v]))/math.sqrt(len(df[u])*len(df[v])*1.0) 
return w 
+0

コードの結果は何ですか?また、何を期待していますか?ところで、貼り付けるコードにいくつかのエラーがあります。 「列車」とは何ですか? –

+0

私のせいです、すでに編集済みです。 – amy

答えて

1

あなたはこれをやろうとしていますか?

def usersimilarity(df): 
    w = dict() 
    for u in df.keys(): 
     for v in df.keys(): 
      if u == v: 
       continue 
      if u not in w.keys(): 
       w[u] = dict() 
      w[u][v] = len(set(train[u])&set(train[v]))/math.sqrt(len(train[u])*len(train[v])*1.0) 
    return w 

あなたがw[u][v][v]を行う存在しない何かにアクセスしています。最初に[u]を作成する必要があります。

+0

はい、ありがとう!私は本当にpythonの初心者です。 – amy

+1

あなたはコレクションのimport defaultdictからやってみて、wをdefaultdict(dict)に設定したいと思うかもしれません(または、狂っていたい場合はhttps://stackoverflow.com/questions/5029934/python-defaultdict-of-defaultdictを参照してください)。 ...しかし、これはPython初心者から少し離れています)... defaultdictは、あなたがまだ定義していないキーにアクセスしようとするとそれを検出し、あなたが渡した型のオブジェクトにします(あなたの場合はdictで) ...これは、あなたがw.keys()のステップではない場合はスキップすることになります) – Foon

関連する問題