我有以下代码:
datedict = defaultdict(set)
with open('d:/info.csv', 'r') as csvfile:
filereader = csv.reader(csvfile, 'excel')
#passing the header
read_header = False
start_date=date(year=2009,month=1,day=1)
#print((seen_date - start_date).days)
tdic = {}
for row in filereader:
if not read_header:
read_header = True
continue
# reading the rest rows
name,id,firstseen = row[0],row[1],row[3]
try:
seen_date = datetime.datetime.strptime(firstseen, '%d/%m/%Y').date()
deltadays = (seen_date-start_date).days
deltaweeks = deltadays/7 + 1
key = name +'-'+id
currentvalue = tdic.get(key, [])
currentvalue.append(deltaweeks)
tdic[key] = currentvalue
except ValueError:
print('Date value error')
pass
tdic = dict((name, max(weeks) - min(weeks) + 1) for name, weeks in tdic.iteritems())
pprint.pprint(tdic)其中我得到了以下结果:
{'Mali-2': 20,
'Gooki-3': 6,
'Piata-4': 6,
'Goerge-5': 4,
'Samoo-6': 1,
'Marria-7': 2}现在,我想在一个excel文件中将名称、id和周数这三个项目作为单独的列进行编写和打印。有人知道这是怎么回事吗?
发布于 2013-04-21 18:17:43
>>> with open('out.csv', 'w') as f:
w = csv.writer(f)
for k, v in tdic.iteritems():
name, id_ = k.split('-')
weeks = v
w.writerow([name, id_, weeks])
>>> with open('out.csv') as f:
print f.read()
Piata,4,6
Mali,2,20
Goerge,5,4
Gooki,3,6
Samoo,6,1
Marria,7,2然而,我不喜欢你这样做的方式,以下是对你的代码的一些建议:
key = name +'-'+id不使用字符串操作来创建键,而是使用tuple
key = (name, id)更改此行:
tdic = dict((name, max(weeks) - min(weeks) + 1) for name, weeks in tdic.iteritems())我只想说
tdic = dict((key, max(weeks) - min(weeks) + 1) for key, weeks in tdic.iteritems())既然现在它是(name, id_)的一个关键,我们应该反思一下(这是一件次要的事情,但很重要)
那么上面的代码就可以简单地
>>> with open('out.csv', 'w') as f:
w = csv.writer(f)
for (name, id_), weeks in tdic.iteritems():
w.writerow([name, id_, weeks])发布于 2013-04-21 18:11:03
你可以这样定义一个dict:
a_dict = {key: { anotherKey: value}}或者,如果字典已经存在:
a_dict[key] = {anotherkey: value}
print a_dict[key][anotherkey]https://stackoverflow.com/questions/16130028
复制相似问题