繁体   English   中英

如何在字典中创建字典

[英]How can I create dictionary within dictionary

我有以下代码:

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文件中编写并打印三个项目,name,id和weeks作为单独的列。 谁知道怎么可能?

>>> 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])

你可以像这样定义一个dict的dict:

a_dict = {key: { anotherKey: value}}

或者如果dict已经存在:

a_dict[key] = {anotherkey: value}
print a_dict[key][anotherkey]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM