下面就为你详细讲解Python 字典、映射和散列表的使用方法。
Python字典
Python字典是一种无序、可变的数据类型,可以存储任意数量的Python对象,每个对象都被认为是一个键值对。字典中的键必须是不可变对象,值可以是任何对象。
创建字典
用花括号 {}
或者 dict()
函数来创建一个空字典。
d = {}
d = dict()
也可以使用 {key: value}
的方式来创建具有初始值的字典。
d = {'apple': 2, 'banana': 3, 'orange': 1}
字典基本操作
访问字典中的值
使用键来访问字典中的值。
d = {'apple': 2, 'banana': 3, 'orange': 1}
print(d['apple']) # 2
当使用未知的键访问时会引发 KeyError
错误,为了避免这种情况,使用 get
方法来访问。
print(d.get('watermelon', 0)) # 0
修改字典
使用键来修改字典中的值。
d = {'apple': 2, 'banana': 3, 'orange': 1}
d['apple'] = 3
print(d) # {'apple': 3, 'banana': 3, 'orange': 1}
删除字典元素
使用 del
关键词来删除字典中指定的元素。
d = {'apple': 2, 'banana': 3, 'orange': 1}
del d['orange']
print(d) # {'apple': 2, 'banana': 3}
字典方法
keys()、values() 和 items() 方法
keys()
方法返回字典中所有键的列表。values()
方法返回字典中所有值的列表。items()
方法返回字典中所有键值对的列表。
d = {'apple': 2, 'banana': 3, 'orange': 1}
print(list(d.keys())) # ['apple', 'banana', 'orange']
print(list(d.values())) # [2, 3, 1]
print(list(d.items())) # [('apple', 2), ('banana', 3), ('orange', 1)]
pop()、popitem() 和 clear() 方法
pop(key[,default])
方法删除指定键,如果键不存在,则返回默认值或者引发 KeyError 错误。popitem()
方法随机删除并返回一个键值对。clear()
方法清空字典。
d = {'apple': 2, 'banana': 3, 'orange': 1}
d.pop('banana')
print(d) # {'apple': 2, 'orange': 1}
print(d.popitem()) # ('orange', 1)
print(d) # {'apple': 2}
d.clear()
print(d) # {}
映射类型
除了字典,Python中还有映射类型,如 defaultdict
、OrderedDict
、Counter
等。
defaultdict
collections
模块中的 defaultdict
是 Python 内置字典的一个子类,提供了一个工厂函数,为字典查询提供默认值。
示例1:统计字符串中每个字符出现的次数
from collections import defaultdict
s = 'hello world'
d = defaultdict(int)
for c in s:
d[c] += 1
print(d) # defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
示例2:将字符串列表按照首字母分组
from collections import defaultdict
words = ['apple', 'banana', 'orange', 'pear']
d = defaultdict(list)
for w in words:
d[w[0]].append(w)
print(d) # defaultdict(<class 'list'>, {'a': ['apple'], 'b': ['banana'], 'o': ['orange'], 'p': ['pear']})
OrderedDict
标准字典的键是无序的,而 collections
模块中的 OrderedDict
是有序字典,保留了键值对添加的顺序。
示例:使用 OrderedDict
将字典按照键的顺序进行排序。
from collections import OrderedDict
d = {'banana': 3, 'orange': 1, 'apple': 2}
sorted_d = OrderedDict(sorted(d.items(), key=lambda x: x[0]))
print(sorted_d) # OrderedDict([('apple', 2), ('banana', 3), ('orange', 1)])
Counter
collections
模块中的 Counter
是一个专门用来计数的工具类,它可以对序列中出现的元素进行计数。
示例:计算字符串中每个单词出现的次数
from collections import Counter
s = 'this is a test sentence this is only a test'
words = s.split()
c = Counter(words)
print(c) # Counter({'this': 2, 'is': 2, 'a': 2, 'test': 2, 'sentence': 1, 'only': 1})
散列表
Python 内置字典的底层实现就是散列表,散列表提供了一种快速的键值存取方式,可以快速地根据键来查找值。
散列表的原理是:通过一个哈希函数将键转化为它的哈希值,并将该值用于查找一个表中的桶,桶中包含了与该键对应的值。
Python 中的散列表可以通过 hash()
函数获取键的哈希值。
示例:将列表中相邻数字对的和存入字典中
numbers = [1, 2, 3, 4, 5, 6]
d = {}
for i in range(len(numbers)-1):
d[hash((numbers[i], numbers[i+1]))] = numbers[i] + numbers[i+1]
print(d) # {-6606413658506001946: 3, -6194340078637518606: 5, -5804568676126658410: 7, 4670544141622732996: 9, 9882563297322483506: 11}
以上就是Python中字典、映射和散列表的使用方法,希望能对你有所帮助。