如何在字典中创build字典
我有下面的代码:
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和周作为单独的列打印出来。 任何人都知道如何可能?
>>> 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
然而,我不喜欢你这样做的方式,下面是你的代码的一些build议:
key = name +'-'+id
而不是使用string操作来创build一个键,使用一个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])
你可以像这样定义字典的字典:
a_dict = {key: { anotherKey: value}}
或者如果字典已经存在:
a_dict[key] = {anotherkey: value} print a_dict[key][anotherkey]