我正在尝试从我的.csv文件创建一个字典列表.我想让文件的第一行成为字典键,并在列的下面对应它们的值.这已经使用.txt文件成功完成,它完美地运行.当我尝试使用.csv格式时,我遇到了能够调用特定密钥的问题,因此我认为它无法正常工作.
newqstars = [meteor['M_P'] for meteor in kept2]
>>>KeyError: 'M_P'
Run Code Online (Sandbox Code Playgroud)
我一直在尝试其他方法,如DictReader()和csv.reader(),但它们不起作用所以我只是问我如何修改下面的内容以便能够处理.csv
def example_05(filename):
with open(filename,'r') as file : data = file.readlines()
header, data = data[0].split(), data[1:]
#................ convert each line to a dict, using header
# words as keys
global kept2
kept2 = []
for line in data :
line = [to_float(term) for term in line.split()]
kept2.append( dict( zip(header, line) ) )
if __name__ == '__main__' :
example_05('Geminids.csv')
Run Code Online (Sandbox Code Playgroud) 我正在过滤一大堆字典.kept
是全局列表,它包含大约9000个字典,所有字典都具有相同的键.我正在尝试删除每个字典,其中'M_P'值大于-4.5,并且有超过一半的字典,所以我创建了一个仅用于其目的的函数.当我检查它们是否已在后来的功能中被删除时,仍然剩下~3000.任何人都可以告诉我为什么会发生这种情况,我相信这些功能会做我告诉它的事吗?
def removeMag():
countMag = 0
for mag in kept:
if to_float(mag['M_P']) > -4.5:
kept.remove(mag)
countMag += 1
else:
continue
print '\n'
print ' Number of mags > -4.5 actually removed: '
print countMag
def remove_anomalies():
count = 0
count08 = 0
count09 = 0
count01 = 0
countMag = 0
countMagDim = 0
#Want to remove Q* < 15 degrees
for row in kept:
#to_float(kept(row))
#Q* greater than 15
if to_float(row['Q*']) < 15.00:
kept.remove(row)
elif to_float(row['vel']) > …
Run Code Online (Sandbox Code Playgroud)