如何将列表转换为字典python;对于字典,一个键可以有多个值吗?

2024-05-06 22:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

import csv

ratings_file = open("ratings.txt","r")
book_file = open("booklist.txt","r")
ratinglist = open("ratings.txt").readlines()
booklist = open("booklist.txt").readlines()

print(ratinglist)

以下是我现在拥有的列表:

['Ben\n', '5 0 0 0 0 0 0 1 0 1 -3 5 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 1 3 0 1 0 -5 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5 \n', 'Moose\n', '5 5 0 0 0 0 3 0 0 1 0 5 3 0 5 0 3 3 5 0 0 0 0 0 5 0 0 0 0 0 3 5 0 0 0 0 0 5 -3 0 0 0 5 0 0 0 0 0 0 5 5 0 3 0 0 \n', 'Reuven\n', '5 -5 0 0 0 0 -3 -5 0 1 -5 5 0 1 0 1 -3 1 -5 0 0 0 0 0 0 3 0 0 0 0 -5 1 0 1 0 -5 0 3 -3 3 0 1 5 1 0 0 0 0 0 1 3 1 5 1 3 \n'

我需要做的是把它转换成字典

我希望这本词典的内容如下:

{"Ben" [5 0 0 0 0 0 0 1 0 1 -3 5 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 1 3 0 1 0 -5 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5 ], "Moose" [5 5 0 0 0 0 3 0 0 1 0 5 3 0 5 0 3 3 5 0 0 0 0 0 5 0 0 0 0 0 3 5 0 0 0 0 0 5 -3 0 0 0 5 0 0 0 0 0 0 5 5 0 3 0 0]}

每个人的名字。问题是它们是单个值的更多键,我想知道使用python是否可能做到这一点。我在网上读到过它,但是它的语法很混乱,或者根本不可能

我想做的事可能吗


Tags: csvmooseimporttxt列表openfileben
2条回答

不要一次将整个文件读入内存,而是使用for循环逐行迭代,但使用循环体中的next显式读取一行。这有效地让您一次迭代两行;我们假设文件中有偶数行,以避免显式地捕获StopIteration,但如果需要,可以很容易地添加

d = {}

with open("ratings.txt") as f:
    for name in f:
        ratings = next(f)
        d[name.strip()] = [int(x) for x in ratings.strip().split()]

请注意,您必须在正文中使用next(f),而不是f.readline(),因为迭代器可能正在对从文件读取的数据进行自己的缓冲,并且您认为f.readline()将返回的行可能已经被迭代器读取,并且正在内存中等待将来对next的调用来返回它

要将评级字符串转换为int列表,请执行以下操作:

def parse_ratings(s):
    return [int(x) for x in s.strip().split()]

要将rating_list放入字典中,只需按步骤2进行循环:

def rating_list_to_dict(rating_list):
    d = {}
    for i in range(0, len(rating_list) // 2, 2):
        name = rating_list[i]
        ratings = parse_ratings(rating_list[i + 1])
        d[name] = ratings
    return d

相关问题 更多 >