首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在字典中创建字典

如何在字典中创建字典
EN

Stack Overflow用户
提问于 2013-04-21 18:06:04
回答 2查看 88关注 0票数 1

我有以下代码:

代码语言:javascript
复制
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)

其中我得到了以下结果:

代码语言:javascript
复制
{'Mali-2': 20,
 'Gooki-3': 6,
 'Piata-4': 6,     
 'Goerge-5': 4,
 'Samoo-6': 1,
 'Marria-7': 2}

现在,我想在一个excel文件中将名称、id和周数这三个项目作为单独的列进行编写和打印。有人知道这是怎么回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-21 18:17:43

代码语言:javascript
复制
>>> 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

然而,我不喜欢你这样做的方式,以下是对你的代码的一些建议:

代码语言:javascript
复制
key = name +'-'+id

不使用字符串操作来创建键,而是使用tuple

代码语言:javascript
复制
key = (name, id)

更改此行:

代码语言:javascript
复制
tdic = dict((name, max(weeks) - min(weeks) + 1) for name, weeks in tdic.iteritems())

我只想说

代码语言:javascript
复制
tdic = dict((key, max(weeks) - min(weeks) + 1) for key, weeks in tdic.iteritems())

既然现在它是(name, id_)的一个关键,我们应该反思一下(这是一件次要的事情,但很重要)

那么上面的代码就可以简单地

代码语言:javascript
复制
>>> with open('out.csv', 'w') as f:
        w = csv.writer(f)
        for (name, id_), weeks in tdic.iteritems():
            w.writerow([name, id_, weeks])
票数 3
EN

Stack Overflow用户

发布于 2013-04-21 18:11:03

你可以这样定义一个dict:

代码语言:javascript
复制
a_dict = {key: { anotherKey: value}}

或者,如果字典已经存在:

代码语言:javascript
复制
a_dict[key] = {anotherkey: value}
print a_dict[key][anotherkey]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16130028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档