我正在处理一个脚本,该脚本从csv
读取数据并将其放入dict
。我的数据如下:
firstName lastName skill
alice sparks artist
mark peters sports
bob stones teacher
Chelsea
chester sports
等等,数据是csv
,这意味着在上面的示例中,空格实际上是逗号。
我想将这些数据解析为csv列,最终的dict必须如下所示:
{'firstName': ['alice', 'mark', 'bob'], 'lastName': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}
理论上:
在python中可以这样吗?
我在网上搜索我得到的基于行的结果,但是我需要列明智而且需要在数组中。
答案 0 :(得分:1)
使用csv.DictReader()
和dictionary.setdefault()
。
csvf = csv.DictReader(open("test.csv","r"))
d = {}
for row in csvf:
for header, item in row.items():
d.setdefault(header, []).append(item)
{'firstName': ['alice', 'mark', 'bob', 'Chelsea', 'chester'],
'lastName': ['sparks', 'peters', 'stones', '', ''],
'skill': ['artist', 'sports', 'teacher', '', 'sports']}
DictReader()
以OrderedDictionary
的形式返回(header, row[i])
的数组,这是您的用例的完美序言。当您遍历每一行时,您所需要的只是一个Dcitionary,默认项类型list
和append
到列表中。
答案 1 :(得分:1)
一种选择是使用pandas DataFrame的to_dict方法:
import pandas as pd
df = pd.read_csv('test.csv')
d = df.to_dict('list')
答案 2 :(得分:0)
您也可以使用pandas:
# Convert DataFrame to Dictionary
df_dict = df.to_dict()
# Now convert it to list of values
for key,value in df_dict:
df_dict[key] = [value for key,value in df_dict[key].items()]
# Or you can directly use:
df_dict = df.to_dict("list")
希望这会有所帮助:)
答案 3 :(得分:0)
此代码还将满足您的所有条件,包括重复项和空值。
<强> 代码: 强>
if __name__ == '__main__':
d = {}
a = []
with open('sample.csv', 'r') as readf:
enum_list = [line.rstrip('\n').split(',') for line in readf]
for i,x in enumerate(enum_list):
if i == 0:
for val in x:
d[val] = []
a.append(val)
continue
for val in x:
i = x.index(val)
if val and val not in d[a[i]]:
d[a[i]].append(val)
print(d)
<强> 输出: 强>
{'first_name': ['alice', 'mark', 'bob', 'Chelsea', 'chester'], 'last_name': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}