首页 > 解决方案 > 在 python 中从我的数据文件中保存/读取错误的数据

问题描述

请查看我得到的以下代码和结果

def load_watchers():
    try:
        users = {}
        with open('xyz.data','r') as user_file2:
            for line in user_file2:
                (user_id, movie_id) = line.split('\t')[0:2]
                users[movie_id] = user_id
        movie_genres_watchers = {}
        with open('abc.item','r') as movie_file2:
            for line in movie_file2:
                data = line.split('|')
                movie_id = data[0]
                movie_title = data[1]
                movie_genre = data[6:23]
                movie_genres_watchers.setdefault(movie_id, {})
                movie_genres_watchers[movie_id][movie_title] = movie_genre,users[movie_id]
        return movie_genres_watchers
    except IOError as ioerr2:
        print('File error in Function 2: ' + str(ioerr2))

并且在执行命令后,

movie_genres_watchers = load_watchers()
movie_genres_watchers['427']

我得到的结果是

{'To Kill a Mockingbird (1962)': (['0',
   '0',
   '0',
   '0',
   '0',
   '0',
   '0',
   '1',
   '0',
   '0',
   '0',
   '0',
   '0',
   '0',
   '0',
   '0',
   '0'],
  '912')}

这是部分正确的。

基本上,结果 912 是 used_id。而且不是唯一的。我在输出中获得了许多与电影相关的用户 ID,movie_id(427)。

这个movie_id 链接到许多user_id。所以理想情况下,所有这些 user_id 也应该为这部特定的电影而来。但我只得到一个。

你们能请问我在上面的代码中做错了什么吗?感谢有人对此提供帮助。在此先感谢。

标签: pythonlist

解决方案


当您创建时,users您会不断覆盖users[movie_id]. 您需要创建users一个容器,例如其值的列表。

try:
    users = {}
    with open('xyz.data','r') as user_file2:
        for line in user_file2:
            (user_id, movie_id) = line.split('\t')[0:2]
            users.setdefault(movie_id,[]).append(user_id)
    ...

或者

import collections
,,,
try:
    users = collections.defaultdict(list)
    with open('xyz.data','r') as user_file2:
        for line in user_file2:
            (user_id, movie_id) = line.split('\t')[0:2]
            users[movie_id].append(user_id)
    ...

推荐阅读