python字典初始化 值是list_python--字典初始化

如果说deque是加强版的list的话,那加强版的字典又是什么的呢?没错,就是今天学习的defaultdict,它与deque一样,都是在collections库中的模块。

先来看这样一个问题:

s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]

对于这样一个元组列表,如果我们想要将它转化为字典,该如何操作呢?我们很容易想到这样的操作:

d={}

s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]

for i,j in s:

d[i]=j

print一下,结果是什么呢?

{'Susan': 4, 'Jone': 2, 'Tom': 1}

这并不是我们期待的结果。在这个例子中,字典中‘Tom’键对应了三个值,我们希望这三个值以列表得形式储存。可以对代码进行一些修改:

k={}

s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]

for i,j in s:

if i not in k.keys():#注意不能写成 if not k[i],因为其返回值不是None,而是error

l=[]

l.append(j)

k[i]=l

else:

k[i].append(j)

print(k)

结果如下:

{'Susan': [4], 'Jone': [2], 'Tom': [5, 4, 1]}

当然,更加pythonic的写法是下面这样,这需要用到我们今天学习的defaultdict。

from collections import defaultdict

d=defaultdict(list)

s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]

for i,j in s:

d[i].append(j)

print(list(d.items()))

通过:

d=defaultdict(list)

我们创建了一个默认值为列表的字典,此时无论键是否存在,其返回值均是一个列表。

>>> d=defaultdict(list)

>>> d[1]

[]

我们看到,此时键[1]不存在,但并没有抛出错误,而是返回一个空列表。

当然,我们也可以让默认值为set,int,etc。我们可以把之前实现的方法改动一下,将列表换为集合:

from collections import defaultdict

d=defaultdict(set)

s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]

for i,j in s:

d[i].add(j)

print(list(d.items()))

结果如下:

[('Susan', {4}), ('Jone', {2}), ('Tom', {1, 4, 5})]

如果默认值是int,键不存在时,返回值默认为0。

>>> d=defaultdict(int)

>>> d[1]

0

>>> d[3]

0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值