字典dict是另一种可变容器模型,且可存储任意类型对象。格式如下:由键(key)-值(value)对组成。
d = {key1 : value1, key2 : value2 }
- 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
- 键可以是任何不可变(immutable)数据类型(不可变数据类型:数字,字符串、元组)(也就是说key不能为列表和字典类型),值可以取任何数据类型。
- 字典中每一项的顺序是任意的。
字典get()操作介绍
# dict.get(key, default=None)
# 返回指定键的值,如果值不在字典中返回default值
num_dict = {"one": 500, "two": "800", "three": "300"}
print(num_dict.get("one", "111"))
print(num_dict.get("four", "hhh"))
返回:
500
hhh
更多操作地址
collections.defaultdict类的介绍
collections.defaultdict([default_factory[, …]])
该函数返回一个类似字典的对象。defaultdict是Python内建字典类(dict)的一个子类,它重写了方法_missing_(key),增加了一个可写的实例变量default_factory,实例变量default_factory被missing()方法使用,如果该变量存在,则用以初始化构造器,默认为None。其它的功能和dict一样,但会为一个不存在的键提供默认值,从而避免KeyError异常。
1、使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。
from collections import defaultdict
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
d = defaultdict(list)
for str in strs:
k = "".join(sorted(str))
d[k].append(str)
print(sorted(list(d.values())))
返回:
[['bat'], ['eat', 'tea', 'ate'], ['tan', 'nat']]
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表[],list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。
2、dict.setdefault()也可以实现相同的功能。
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
d={}
for str in strs:
k = "".join(sorted(str))
d.setdefault(k,[]).append(str)
a=sorted(list(d.values()))
print('\n',a)
返回:
[['bat'], ['eat', 'tea', 'ate'], ['tan', 'nat']]
字符串中的字母第一次出现时,字典中没有该字母,default_factory函数调用int()为其提供一个默认值0,加法操作将计算出每个字母出现的次数。
一般的dict类型会导致KeyError异常:
from collections import defaultdict
s = 'leetcode'
d = {}
for k in s:
d[k] += 1
print('\n',d)
返回:
KeyError: 'l'
3、defaultdict还可以被用来计数,将default_factory设为int即可。 defaultdict类避免KeyError异常:
from collections import defaultdict
s = 'leetcode'
d = defaultdict(int)
for k in s:
d[k] += 1
print(,d)
a=sorted(d.items())
print('\n',a)
返回:
defaultdict(<class 'int'>, {'l': 1, 'e': 3, 't': 1, 'c': 1, 'o': 1, 'd': 1})
[('c', 1), ('d', 1), ('e', 3), ('l', 1), ('o', 1), ('t', 1)]
4、使用匿名函数(lambda function)可以更快、更灵活的创建常值函数,返回包括0在内的任意常数值。
def constant_factory(value):
return lambda: value
d = defaultdict(constant_factory('leetcode'))
print(d)
d.update(name='panghu', action='like')
print('\n',d)
print('\n','%(name)s %(action)s %(object)s' % d)
返回:
defaultdict(<function constant_factory.<locals>.<lambda> at 0x000002ACE85B1620>, {})
defaultdict(<function constant_factory.<locals>.<lambda> at 0x000002ACE85B1620>, {'name': 'panghu', 'action': 'like'})
panghu like leetcode
5、default_factory设为set时,可以用defaultdict建立集合字典。
from collections import defaultdict
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
d = defaultdict(set)
for str in strs:
k = "".join(sorted(str))
d[k].add(str)
print(sorted(list(d.values())))
返回:
[{'tea', 'ate', 'eat'}, {'tan', 'nat'}, {'bat'}]
仅为学习记录,侵删