簡體   English   中英

我在python中解析數據文件時遇到KeyError

[英]I'm getting KeyError while parsing a data file in python

def loadMovieLens(path='C:\Users\karan\Desktop\ml-100k'):
  # Load data
  prefs={}
  for line in open(path+'/new1.data'):
      (user,title,rating,ts)=line.split('\t')[0:4]
      prefs[user][title]=float(rating)
  return prefs

解析文件時出現KeyError。

您的字典尚無鍵,因此data[user]將不存在。 您可以使用dict.setdefault()方法讓Python為缺少的鍵添加默認值:

prefs.setdefault(user, {})[title] = float(rating)

上面的代碼告訴prefs如果user尚未在密鑰中添加{} (空字典)作為該密鑰的值。 無論哪種方式,都將返回現有值或新值。

經過一些小的改進,完整的功能將變為:

def loadMovieLens(path='C:\Users\karan\Desktop\ml-100k'):
    prefs = {}
    with open(os.path.join(path, 'new1.data')) as f:
        for line in f:
            user, title, rating, ts = line.split('\t', 4)[:4]
            prefs.setdefault(user, {})[title] = float(rating)
    return prefs

我添加了一條with語句(因此,讀取完成后文件會正確關閉),使用os.path.join()來構建路徑(因此它可以處理與當前操作系統無關的路徑分隔符),並將拆分限制為4次。

您也可以切換到csv模塊來處理選項卡上的拆分。

for line in open(path+'/new1.data'):
      (user,title,rating,ts)=line.split('\t')[0:4]
      if prefs[user]:
          prefs[user][title]=float(rating)
      else:
          prefs[user] = {title: float(rating)}

您必須先定義字典prefs[user]然后才能向其中添加映射

您嘗試設置更新字典,該字典不存在。 因此,您必須為每個用戶生成一個字典,然后再使用它。 最好,使用defaultdict來自動生成dict:

from collections import defaultdict

def loadMovieLens(path=r'C:\Users\karan\Desktop\ml-100k'):
    prefs = defaultdict(dict)
    with open(os.path.join(path, 'new1.data')) as lines:
        for line in lines:
            user, title, rating, _ts = line.split('\t', 3)
            prefs[user][title] = float(rating)
    return prefs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM