我是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)
Run Code Online (Sandbox Code Playgroud)
问题:返回的输出仅用于前两列的"最后"或"最底部"行,即{'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
Run Code Online (Sandbox Code Playgroud)
这里:
mydict = {k:v}
Run Code Online (Sandbox Code Playgroud)
您在每次迭代中都在创建新字典,之前的数据已丢失.
更新:
你可以做这样的事情:
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]}
Run Code Online (Sandbox Code Playgroud)
这样,将存储相同密钥的每个值
您的代码将是:
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
Run Code Online (Sandbox Code Playgroud)
Update2:你的意思是?
for k, v in mydict.items():
print "%s: %s" % (k, v)
>>>
1: [2, 3]
2: [4]
3: [2, 4]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您正在创建一个新的dict并在每次迭代时覆盖旧的dict.@develerx的答案解决了这个问题.我只是想用dict理解来指出一种更简单的方法:
假设csv文件包含两列.
if __name__=="__main__":
reader = csv.reader(open("file.csv", "rb"))
my_dict = {k: v for k, v in reader}
print mydict
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本(我认为超过2.7),则不能使用dict理解,只需使用dict函数:
my_dict = dict((k, v) for k, v in reader)
Run Code Online (Sandbox Code Playgroud)
编辑:我只是想到了; my_dict = dict(reader)也可以工作.
| 归档时间: |
|
| 查看次数: |
7266 次 |
| 最近记录: |