Tor*_*597 5 python csv dictionary python-3.x
我在Python中有一个家庭作业问题.
我在Linux上使用Python 3.4.0版.
设计文档声明我要使用内置函数读取CSV文件,这些函数指定为names.dat,格式如下:
name:name2, name:name3, name2:name4, name3:name5\n (etc)
Run Code Online (Sandbox Code Playgroud)
然后我将这些关键字对添加到字典中,这是我坚持的部分.
我到目前为止的代码是这样的:
dictionary = dict()
database = open('names.dat', 'r')
data = database.read()
data = data.rstrip('\n')
data = data.split(',')
for item in range(len(data)):
dictionary.update(data[item-1])
Run Code Online (Sandbox Code Playgroud)
我的想法是,如果我有一个格式为"name:name2"的列表元素,并且我将该元素作为参数调用字典更新函数,它将正确映射到字典中的关键字对.
但是,情况并非如此,因为我在运行此脚本时遇到此错误:
File "MyName.py", line 7, in <module>
dictionary.update(data[item-1])
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Run Code Online (Sandbox Code Playgroud)
如果你想从给定的csv创建一个精确的数据集,@ Paulo Scardine有一个很好的答案.如果你想根据键组合值,可以使用:
changes = {}
with open('test.csv', 'r') as f:
for row in f:
for e in row.rstrip('\n').split(", ") : #split lines by column
print (e) #just to show what is being generated here
(k,v) = e.split(":") #split further into key, value pairs
changes.setdefault(k, []).append(v)
#creates empty list if new key, adds value to list
print (changes)
Run Code Online (Sandbox Code Playgroud)
数据看起来像:
{'name3': ['name5'], 'name2': ['name4', 'name6', 'name5'], 'name1': ['name', 'name4'], 'name': ['name2', 'name3']}
Run Code Online (Sandbox Code Playgroud)
这可以进一步简化,但我认为这给了一个很好的例子,有人可以学习.
编辑:在@Paulo Scardine评论之后添加了setdefault方法