我有一个数据文件,格式如下:
9, 12, 16, ABC, a12d
8, 09, 24, ADP, v154a
6, 07, 16, ADP, l28a
2, 14, 15, CDE, d123p
我需要建立一个集合字典,格式如下:
ABC : ([a12d])
ADP : ([v154a, l128a])
CDE : ([d123p])
我可以建立一个任何列的集合,例如:
with open('data.csv','r') as r:
name = set([line.strip().split(',')[3] for line in r])
我想一定有一种方法可以使集合中的每个元素都成为字典键,并将其相邻的值添加到集合中?还有一个额外的复杂性,一些键有多个值(例如上面的第2行和第3行),但它们被分隔成单独的行。
提前感谢您的帮助
from collections import defaultdict
d = defaultdict(set)
with open('data.csv','r') as r:
for line in r:
splitted = line.strip().split(',')
name = splitted[3].strip()
value = splitted[4].strip()
d[name].add(value)
如果你不介意使用pandas:
import pandas as pd
df = pd.read_csv("data.csv", header=None, usecols=[3,4], index_col=0, skipinitialspace=1, names=["key", "value"])
可以读为读data.csv
,其中不包含header
,只使用3
和4
列,并使用0
列(以前的3
)作为索引。值中的Skip the initial space
和您读取的列(3
和4
)中的key
和value
中的name
。这将给你:
df
value
key
ABC a12d
ADP v154a
ADP l28a
CDE d123p
所以你可以使用.loc
:
df.loc["ABC"].values
array(['a12d'], dtype=object)
df.loc["ADP"].values
array([['v154a'],
['l28a']], dtype=object)
对于后者,可以使用ravel()
:
df.loc["ADP"].values.ravel()
array(['v154a', 'l28a'], dtype=object)
所以它不是一个真正的字典,但它的行为有点像字典,你可以用这种对象做更多的事情(一个pandas Dataframe
)。另外,您可以轻松地读取和写入csv文件。如果你不知道熊猫,请看一看:
- http://pandas.pydata.org/
- http://pandas.pydata.org/pandas-docs/stable/
下面的代码读取列值,然后将它们转换为python中的字典
cat dictionary.txt (This txt has info about Name Age Birthyear)
Luffy 20 2000
Nami 18 2002
Chopper 10
##################### code is here #######
#!/usr/bin/python3.7.4
d = {}
with open("dictionary.txt") as f:
for line in f:
line=line.split()
d.setdefault(line[0],[]).append(line[1])
if len(line)==3:
d.setdefault(line[0],[]).append(line[2])
else:
d.setdefault(line[0],[]).append('NULL')
print(d)
输出:{"路飞":"20","2000","纳米":"18","2002","直升机":[‘10’,‘空’]}