我在file.sec中有以下数据:
goog,100
goog,101
goog,103
micro,200
micro,201
face,99
我想将此数据转换为字典: {'goog':[100,101,103],'micro':[200,201],'face':[99]}
我尝试了下面的代码,但是只要值从goog变为micro,它就会清除列表,我得到的结果是:{'goog':[99],'micro':[99],'face':[99 ]}
allD = {}
allN = []
f = open('file.sec' , 'r')
for data in f:
com = data.split(',')[0]
if com not in allD.keys():
del allN[:]
allN.append( data.split(',')[1] )
allD[ com ] = allN
print allD
答案 0 :(得分:4)
您可以使用defaultdict
from collections import defaultdict
result = defaultdict(list)
f = open('file.sec' , 'r')
for data in f:
com = data.split(',')[0]
result[com].append(data.split(',')[1]
答案 1 :(得分:4)
您可以使用defaultdict解决此问题:
from collections import defaultdict
data_dict = defaultdict(list)
f = open('file.sec' , 'r')
for data in f:
key, value = data.split(',')
data_dict[key].append(value)
请注意,我已经使用python 3语法编写了此代码,因此您可能需要对python 2稍作更改。
答案 2 :(得分:2)
您并不遥远,但是对于什么是Python分配却有误解。当您编写allD[ com ] = allN
时,allD[com]
不是allN
的副本,而只是对同一对象的另一个引用。因此,当您以后用allN
清理del allN[:]
时,实际上是清理了最后一个allD[com]
。您应该改用一个新对象:
allD = {}
allN = []
f = open('file.sec' , 'r')
for data in f:
com = data.split(',')[0]
if com not in allD.keys():
allN = []
allD[ com ] = allN
allN.append( data.split(',')[1] )
print allD
答案 3 :(得分:0)
没有defaultdict的示例:
allD = {}
allN = []
f = open('data.csv', 'r')
for data in f:
com = data.split(',')[0]
if com not in allD.keys():
allD[com] = []
allD[com].append(data.split(',')[1].strip())
print(allD)