【问题标题】:Read out .csv and hand results to a dictionary读出 .csv 并将结果交给字典
【发布时间】:2020-03-21 13:07:18
【问题描述】:

我正在学习一些编码,但遇到了一个我无法解释的错误。基本上我想从美国读出一个包含出生统计数据的 .csv 文件,以找出记录时最流行的名字。

我的代码如下所示:


# 0:Id, 1: Name, 2: Year, 3: Gender, 4: State, 5: Count

names = {}       # initialise dict names
maximum = 0      # store for maximum
l = []


with open("Filepath", "r") as file:
    for line in file:
        l = line.strip().split(",")
        try: 
            name = l[1]
            if name in names:
                names[name] = int(names[name]) + int(l(5))
            else:
                names[name] = int(l(5))
        except:
            continue

        print(names)    
        max(names)


def max(values):
    for i in values:
        if names[i] > maximum:
            names[i] = maximum
        else:
            continue

        return(maximum)

print(maximum)


似乎字典根本不接受任何值,因为打印命令不返回任何内容。我哪里出错了(顺便说一下,文件路径是正确的,因为 .csv 很大,所以需要一段时间才能得到结果。所以我的假设是我在写入字典时出错了,但我盯着码了一阵子,没看到!)

【问题讨论】:

    标签: python-3.x csv dictionary


    【解决方案1】:

    一些改进代码的建议:

    names = {}       # initialise dict names
    maximum = 0      # store for maximum
    
    with open("Filepath", "r") as file:
        for line in file:
            l = line.strip().split(",")
            names[name] = names.get(name, 0) + l[5]
    
    maximum = [(v,k) for k,v in names]
    maximum.sort(reversed=True)
    print(maximum[0])
    

    您需要查看 Python 字典并了解 get。它可以帮助您实现以更少的代码行(更 Pythonic)制作 names 字典的目标。

    此外,您使用def 生成了一个函数,但您从未调用过该函数。这就是它不打印的原因。

    我建议使用上面的短代码。有问题就问吧!

    【讨论】:

    • 啊,对了,我在另一个讲座中使用了 get 函数,但没有使用它,因为它还没有出现在我目前正在做的讲座中......我会用这个函数试试max 的调用 - 我认为函数是通过它们的名称调用的,而我想要传递的参数会在函数定义的正上方? max(names)这不是以字典名作为参数调用函数吗?
    • 另外,maximum = [(v,k) for k,v in names] maximum.sort(reversed=True) print(maximum[0])code 中的列表解包 (?) 会导致错误。不过感谢您的帮助,get 功能确实非常有用!
    【解决方案2】:

    想通了。

    我认为存在一些流程问题:我在定义函数之前调用了它...这是一个问题还是 python 可以接受?

    另外我认为我使用 max 作为变量的名称,但是有一个同名的内置函数,我猜这可能会导致问题?!与价值相同

    这是我的最终代码:

    names = {}       # initialise dict names
    l = []
    
    def maxval(val):
        maxname = max(val.items(), key=lambda x : x[1])
        return maxname
    
    
    with open("filepath", "r") as file:
        for line in file:
            l = line.strip().split(",")
            name = l[1]
            try: 
                names[name] = names.get(name, 0) + int(l[5])
            except:
                continue
    
        #print(str(l))
        #print(names)    
    
    print(maxval(names))
    
    

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 2021-12-24
      • 2013-11-14
      • 2017-07-23
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多