python "二維" 字典(字典嵌套)


基本用法

今天讀在movielens數據集的推薦系統代碼讀到"二維"字典的寫法,這里學習記錄一下

def get_dict(records:list, type:str):#此處record為ratings表的前三項,userid movieid rating,通過上面一個函數分為訓練和測試集
    # 先看看redis里面有沒有,如果有直接返回type_dict
    if redis.exists(type+'_dict'):
        return pickle.loads(redis.get(type+'_dict'))
    #redis中沒有的話,開始新建,記錄依次為user_id movie_id rating
    user_movie = {} #新建一個字典
    for record in records:
        user_id = int(record[0])
        movie_id = int(record[1])
        rating = int(record[2])
        if user_id not in user_movie:
            user_movie[user_id]={}
        user_movie[user_id][movie_id] = rating #二維字典

  • user_movie是一個空字典
  • user_movie[user_id]這里新建了字典的第一維
  • user_movie[user_id][movie_id]新建了字典的第二維
jupyter notebook中測試一下
#在定義的時候初始化二維字典
dict_2d = {'a' : {'a' : 1, 'b' : 3}, 'b' : {'a' : 6}}
dict_2d['a']['a']
1

#一步一步的創建上面這個“二維”字典
myDict = {}
myDict['a'] = {}
myDict['a']['a'] = 1
myDict['a']['b'] = 3
myDict['b'] = {}
myDict['b']['a'] = 6
#測試是不是每一個都讀到了
print(myDict['a']['a'])
print(myDict['a']['b'])
print(myDict['b']['a'])
1
3
6

將二維字典轉換為二維數組

dict_2d2 = {0: {0: 173, 1: 342, 2: 666, 3: 506, 4: 94},
 1: {0: 13, 1: 2171, 2: 1915, 3: 3075, 4: 630},
 2: {0: 0, 1: 265, 2: 5036, 3: 508, 4: 11},
 3: {0: 0, 1: 3229, 2: 2388, 3: 3649, 4: 193},
 4: {0: 3, 1: 151, 2: 591, 3: 1629, 4: 410}}

res = np.array([list(item.values()) for item in dict_2d2.values()])

res

array([[ 173, 342, 666, 506, 94],
[ 13, 2171, 1915, 3075, 630],
[ 0, 265, 5036, 508, 11],
[ 0, 3229, 2388, 3649, 193],
[ 3, 151, 591, 1629, 410]])

np.dot(res, res)

array([[ 34657, 2626206, 5388006, 3477036, 375246],
[ 32362, 15249467, 21525493, 19902168, 2241792],
[ 3478, 3551848, 27088376, 5244774, 324900],
[ 42556, 19454743, 27037378, 24771877, 2843925],
[ 3712, 5807413, 7399801, 7378182, 584410]])

參考:
https://www.jb51.net/article/157025.htm
https://gitee.com/earth_wyz/movieRS
https://www.it1352.com/1594129.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM