从csv文件列中创建字典

时间:2011-09-08 19:59:05

标签: python

我是python中词典概念的新手。 我有一个包含多列的csv文件,我想创建一个字典,以便从第一列获取键,从第二列获取值,并为这两列的所有行创建一个键:值对。 代码如下:

    if __name__=="__main__":
reader = csv.reader(open("file.csv", "rb"))
for rows in reader:
        k = rows[0]
        v = rows[1]
        mydict = {k:v}
print (mydict)

问题:返回的输出仅用于前两列的“最后”或“最底部”行,即{'12654':'18790'}。我希望字典包含此格式的前两列的所有100行。怎么做?我可以在前两列的行号上运行一些循环吗...我不知道怎么做。

2 个答案:

答案 0 :(得分:6)

if __name__=="__main__":
    mydict = {}
    reader = csv.reader(open("file.csv", "rb"))
    for rows in reader:
        k = rows[0]
        v = rows[1]
        mydict[k] = v
    print mydict

下面:

mydict = {k:v}

你在每次迭代中都在制作新词典,之前的数据已经丢失了。

更新

你可以做这样的事情:

mydict = {}
L = [(1, 2), (2, 4), (1, 3), (3, 2), (3, 4)]
for el in L:
    k, v = el
    if not k in mydict:
        mydict[k] = [v]
    else:
        mydict[k].append(v)

print mydict

>>> 
{1: [2, 3], 2: [4], 3: [2, 4]}

这样,将存储相同密钥的每个值

您的代码将是:

if __name__=="__main__":
    mydict = {}
    reader = csv.reader(open("file.csv", "rb"))
    for i, rows in enumerate(reader):
        if i == 0: continue
        k = rows[0]
        v = rows[1]
        if not k in mydict:
            mydict[k] = [v]
        else:
            mydict[k].append(v)

    print mydict

Update2:你的意思是?

for k, v in mydict.items():
    print "%s: %s" % (k, v)

>>>
1: [2, 3]
2: [4]
3: [2, 4]

Update3:

这应该有效:

if __name__=="__main__":
        mydict = {}
        reader = csv.reader(open("file.csv", "rb"))
        for i, rows in enumerate(reader):
            if i == 0: continue
            k = rows[0]
            v = rows[1]
            if not k in mydict:
                mydict[k] = [v]
            else:
                mydict[k].append(v)

        print mydict

答案 1 :(得分:5)

您正在创建一个新的dict并在每次迭代时覆盖旧的dict。 @develerx's answer解决了这个问题。我只想用dict理解来指出一种更简单的方法:

假设csv文件包含两列。

if __name__=="__main__":
    reader = csv.reader(open("file.csv", "rb"))
    my_dict = {k: v for k, v in reader}
    print mydict

如果您使用的是旧版本(我认为超过2.7),则无法使用dict理解,只需使用dict函数:

my_dict = dict((k, v) for k, v in reader)

编辑:我只是想到了; my_dict = dict(reader)也可以发挥作用。