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