将文件读取到字典中,以便列成为键和值,Python



我有一个数据文件,格式如下:

 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,只使用34列,并使用0列(以前的3)作为索引。值中的Skip the initial space和您读取的列(34)中的keyvalue中的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’,‘空’]}

最新更新