我有一個文本文件,數以十萬計的學生,他們對某些電影的評級,第一個詞是學生號碼,第二個是電影名稱(與沒有空格),第三是評級,他們給了這部電影:維護電影/等級的大列表中的秩序
student1000 Thor 1
student1001 Superbad -3
student1002 Prince_of_Persia:_The_Sands_of_Time 5
student1003 Old_School 3
student1004 Inception 5
student1005 Finding_Nemo 3
student1006 Tangled 5
我想這樣,我每個學生映射到他們的電影分級制度,其中收視率是他們在字典中安排按每個學生的順序排列。換句話說,我想有這樣的:
{student1000 : [1, 3, -5, 0, 0, 3, 0,...]}
{student1001 : [0, 1, 0, 0, -3, 0, 1,...]}
使得第一,第二,第三等爲每個學生等級對應於相同的電影。這個順序對於電影和學生號碼是完全隨機的,而且我很難有效地做到這一點。任何幫助提出一些可以最大限度地減少這個問題的大O複雜性的東西將會非常棒。
我終於搞清楚了。這裏是我用於任何人想知道的代碼:
def get_movie_data(fileLoc):
movieDic = {}
movieList = set()
f = open(fileLoc)
setHold = set()
for line in f:
setHold.add(line.split()[1])
f.close()
movieList = sorted(setHold)
f = open(fileLoc)
for line in f:
hold = line.strip().split()
student = hold[0]
movie = hold[1]
rating = int(hold[2])
if student not in movieDic:
lst = [0]*len(movieList)
movieDic[student] = lst
hold2 = movieList.index(movie)
rate = movieDic[student]
rate[hold2] = rating
f.close()
return movieList, movieDic
感謝您的幫助!
這看起來像是我在找的東西。但是,當我嘗試獲取長度時,變量「ratings [student]」會給出錯誤,因爲它是Nonetype。我對Python類型並不十分熟悉,但是我怎麼讓計算機知道它是一個列表? – weskpga
如果你只是說評級[學生] = []它應該讓Python知道這是一個列表。它應該在學生不在評分的循環中實例化列表。您能否深入瞭解一下您的確切錯誤和實施情況? –
我想通了,如我的編輯。謝謝您的幫助! – weskpga