【问题标题】:Wrong data saved / read from my datafiles in python在 python 中从我的数据文件中保存/读取错误的数据
【发布时间】:2020-03-25 11:18:23
【问题描述】:

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

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。而且不是唯一的。我在输出中得到了许多与movie_id(427) 的电影相关的user_id。

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

请问我在上面的代码中做错了什么? 感谢是否有人对此有所帮助.. 提前致谢。

【问题讨论】:

  • 您好,您能否提供一个示例,说明两个数据文件中的内容?我猜这与您在 xyz 中读取的每个新用户有关。数据会覆盖该电影的任何先前数据。您将希望有一种方法可以将数据附加到该特定电影。此外,数据库可能是一种更有效的方法。
  • 下次请为您的问题选择合适的标题。不,如果您声称自己的问题比其他人的问题更重要(这就是您刚刚所做的),您将不会更快地得到答案

标签: python list


【解决方案1】:

当您创建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)
    ...

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 2017-10-24
    • 1970-01-01
    • 2018-06-09
    • 2022-01-15
    • 1970-01-01
    • 2021-08-24
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多