Python 从csv文件列创建字典

Python 从csv文件列创建字典,python,Python,我对python中字典的概念不太熟悉。 我有一个包含多列的csv文件,我想创建一个字典,以便从第一列获取键,从第二列获取值,并为这两列的所有行创建一个key:value对。 代码如下: if __name__=="__main__": reader = csv.reader(open("file.csv", "rb")) for rows in reader: k = rows[0] v = rows[1] mydict = {k:v} p

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

    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行。怎么做?我可以在前两列的行号上运行一些循环吗?我不知道怎么做

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 = {}
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
更新2:你是说

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

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

这应该起作用:

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

您正在创建一个新的dict,并在每次迭代中覆盖旧的dict。解决了这个问题。我只是想指出一个更简单的方法,使用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)
也可以工作。

你的意思是从第一行取钥匙吗?这里的代码从最后一行取钥匙(最后一行的两列)但我希望它从第一行到最后一行的顺序覆盖我文件中每一行的两列。您可以使用第二行或第三行。这两种代码都可以工作,但部分解决了问题,因为字典中的键:值对不是所有行都按顺序排列的,即第1行、第2行、第3行等。它们是随机生成的,不包括所有100行。是否因为列中的许多键值被重复?在字典中键必须是唯一的?在我的数据的两列中…值都在重复。比如,如果第8行有12345:90873,那么第48行可以有90873:12345。在其他行中,12345的配对与12345:87632不同,90873:76004也不同。非常感谢..这确实列出了键12345的所有值,其中12345位于第1列n列12345在col2中的所有对应值都存储在dict中。这里还有一件事…如果我想打印每个{key:[值,值]}单独列出,即在一行中列出每个键:值组合,在另一行中列出下一个键:值,等等,在同一个字典中…我可以用这种方式在字典中分开内容吗?或者干脆不能按行列出?…对于行1:key1:value1,对于row2:key2:value2等等…即使某些键在col1中以不同的“值”重复,或者一个col1中的键在col2中对于其他“键”是“值”。我真的希望这是有意义的。。。
my_dict = dict((k, v) for k, v in reader)