字典问题

-2 python dictionary list-comprehension

 rdict = {}
    f = open(filename)
    for line in f: 
        d = line.split()
        name = d[0]
        rating = int(d[2])
        if name in rdict:
            pass
        else: 
            zlist = []
            for i in range[150]:
                rdict[name] = #a list of ratings
Run Code Online (Sandbox Code Playgroud)

我想将值(从这个以外的数据!)添加到范围150的rdict.我将rdict设置为什么?

Her*_* Go 5

根据您提供的线索,我对您的数据形状进行了两次猜测:

  1. 数据类似于包含许多行的文件,第一列包含名称(第0列),第3列包含该名称的等级(第2列).在这种情况下,我猜测每个名称的评级为150次,因此文件中出现的每个名称都会出现150次.在这个场景中,我用defaultdict替换了你的字典,其工厂参数是list,这意味着每个名称的值将默认为空列表,然后对于我们处理的每一行,我们只需将评级添加到列表中.

    from collections import defaultdict
    
    rdict = defaultdict(list)
    f = open(filename)
    for line in f: 
       d = line.split()
       name = d[0]
       rating = int(d[2])
       rdict[name].append(rating)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 也许你有更多的柱状类型的文件,每行150个评级,在这种情况下,下面的代码可能更接近你正在寻找的:

    from collections import defaultdict
    
    FIRST_RATING_COL=1
    rdict = {}
    f = open(filename)
    for line in f:
        d = line.split()
        name = d[0]
        string_ratings = d[FIRST_RATING_COL:]
        int_ratings = map(int, string_ratings)
        rdict[name] = int_ratings
    
    Run Code Online (Sandbox Code Playgroud)

    在第二种情况下,因为评级一次可用,我们可以坚持使用原始字典,我们只需将正确的列集提取到列表中,然后将整个列表一次性转换为整数,然后将结果列表分配给相应的列表.在rdict中的名字.您可能需要使用FIRST_RATING_COL的值来查找正确的起始位置,具体取决于文件的布局方式.

如果这些都不正确,那么我怀疑提供您的数据的示例或有关它的形状的更多信息将帮助人们提供更有帮助的答案.