无序的、可变的序列,其元素以“键值对(key-value)”的形式存储
字典类型是 Python 中唯一的映射类型(通过一个元素,可以唯一找到另一个元素)
主要特征 | 解释 |
---|---|
通过键而不是通过索引来读取元素 | 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。 |
字典是任意数据类型的无序集合 | 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。 |
字典是可变的,并且可以任意嵌套 | 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。 |
字典中的键必须唯一 | 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。 |
字典中的键必须不可变 | 字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。 |
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
参数说明:
dictname 表示字典变量名
keyn : valuen 表示各个元素的键值对
dict1 = {'姓名': '小明', '住址': '北京'}
print(dict1)
dict2 = {('AA', '张三'): 100, '分数': [69,90]}
print(dict2)
dict3 = {}
print(dict3)
运行结果:
{'姓名': '小明', '住址': '北京'}
{('AA', '张三'): 100, '分数': [69, 90]}
{}
dictname = dict.fromkeys(list,value=None)
参数说明:
list 参数表示字典中所有键的列表(list)
value 参数表示默认值,如果不写,则为空值 None
注:常用于初始化字典,设置 value 的默认值
list1 = ['语文', '数学', '英语']
dict4 = dict.fromkeys(list1, 80)
print(dict4)
运行结果:
{'语文': 80, '数学': 80, '英语': 80}
创建格式 | 注意事项 |
---|---|
a = dict(str1=value1, str2=value2, str3=value3) | str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。 |
#方式1 demo = [('two',2), ('one',1), ('three',3)] #方式2 demo = [['two',2], ['one',1], ['three',3]] #方式3 demo = (('two',2), ('one',1), ('three',3)) #方式4 demo = (['two',2], ['one',1], ['three',3]) a=dict(demo) | 向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值 |
keys = ['one', 'two', 'three'] #还可以是字符串或元组 values = [1, 2, 3] #还可以是字符串或元组 a = dict( zip(keys, values) ) | 通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。 |
注:字典中各元素的键都只能是字符串、元组或数字,不能是列表。列表是可变的,不能作为键
del dictname
dict5 = {'语文': 88, '数学': 90}
print(dict5)
del dict5
print(dict5)
运行结果:
{'语文': 88, '数学': 90}
Traceback (most recent call last):
File "E:\PycharmProjects\pythonProject\test_basic.py", line 147, in <module>
print(dict5)
^^^^^
NameError: name 'dict5' is not defined. Did you mean: 'dict'?
dictname[key] = value
参数说明:
dictname 表示字典名称
key 表示新的键
value 表示新的值,只要是 Python 支持的数据类型都可以
dict6 = {'a': 1, 'b': 2}
print(dict6)
dict6['c'] = 3
print(dict6)
dict6['b'] = 4
print(dict6)
运行结果:
{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 4, 'c': 3}
dictname.pop(key)
参数说明:
dictname 表示字典名称
key 表示键
注:删除不存在的键值对会报错
dict7 = {'a': 1, 'b': 2, 'c': 3}
dict7.pop('c')
print(dict7)
dict7.pop('d')
print(dict7)
运行结果:
{'a': 1, 'b': 2}
Traceback (most recent call last):
File "E:\PycharmProjects\pythonProject\test_basic.py", line 160, in <module>
dict7.pop('d')
KeyError: 'd'
dictname.popitem()
注:返回类型为元组 tuple
dict8 = {'a': 1, 'b': 2, 'c': 3}
a = dict8.popitem()
print(a)
print(type(a))
运行结果:
('c', 3)
<class 'tuple'>
dicname['key'] = new_key
参数说明:
dicname:字典名称
key:需要修改的字典的key
new_value:修改后的新的值
dict9 = {'a': 1, 'b': 2, 'c': 3}
dict9['a'] = 'AA'
print(dict9)
dict9['d'] = 4
print(dict9)
运行结果:
{'a': 'AA', 'b': 2, 'c': 3}
{'a': 'AA', 'b': 2, 'c': 3, 'd': 4}
dictname.update(dict)
dict10 = {'a': 1, 'b': 2, 'c': 3}
dict10.update({'d': 4, 'e': 5})
print(dict10)
运行结果:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
dictname[key]
参数说明:
dictname 表示字典变量的名字
key 表示键名
注:键必须是存在的,否则会抛出异常
dict11 = {'a': 1, 'b': 2, 'c': 3}
print(dict11['a'])
print(dict11['d'])
运行结果:
1
Traceback (most recent call last):
File "E:\PycharmProjects\pythonProject\test_basic.py", line 182, in <module>
print(dict11['d'])
~~~~~~^^^^^
KeyError: 'd'
dictname.get(key,default)
参数说明:
dictname 表示字典变量的名字
key 表示指定的键
default 用于指定要查询的键不存在时,此方法返回的默认值,如果不手动指定,会返回 None
dict12 = {'a': 1, 'b': 2, 'c': 3}
print(dict12.get('a'))
print(dict12.get('d'))
print(dict12.get('d', 4))
运行结果:
1
None
4
1)Python 2.x 中,上面三个方法的返回值都是列表(list)类型
2)Python 3.x 中,它们的返回值并不是我们常见的列表或者元组类型,因为 Python 3.x 不希望用户直接操作这几个方法的返回值。
dict13 = {'a': 1, 'b': 2, 'c': 3}
print(dict13.keys())
print(type(dict13.keys()))
print(dict13.values())
print(type(dict13.values()))
print(dict13.items())
print(type(dict13.items()))
运行结果:
dict_keys(['a', 'b', 'c'])
<class 'dict_keys'>
dict_values([1, 2, 3])
<class 'dict_values'>
dict_items([('a', 1), ('b', 2), ('c', 3)])
<class 'dict_items'>
想使用这三个方法返回的数据,一般有下面两种方案:
1>使用 list() 函数,将它们返回的数据转换成列表
dict14 = {'a': 1, 'b': 2, 'c': 3}
list1 = list(dict14.keys())
print(list1)
print(type(list1))
list2 = list(dict14.values())
print(list2)
print(type(list2))
list3 = list(dict14.items())
print(list3)
print(type(list3))
运行结果:
['a', 'b', 'c']
<class 'list'>
[1, 2, 3]
<class 'list'>
[('a', 1), ('b', 2), ('c', 3)]
<class 'list'>
2>使用 for in 循环遍历它们的返回值
dict15 = {'a': 1, 'b': 2, 'c': 3}
for key in dict15.keys():
print(key, end="")
print('\n-----------------------')
for value in dict15.values():
print(value, end="")
print('\n-----------------------')
for k_v in dict15.items():
print(k_v, end='')
print('\n-----------------------')
运行结果:
abc
-----------------------
123
-----------------------
('a', 1)('b', 2)('c', 3)
-----------------------
dictname.setdefault(key, defaultvalue)
参数说明:
dictname 表示字典名称
key 表示键
defaultvalue 表示默认值(可以不写,不写的话是 None)
注:当指定的 key 不存在时,setdefault() 会先为这个不存在的 key 设置一个默认的 defaultvalue,然后再返回 defaultvalue
dict16 = {'a': 1, 'b': 2, 'c': 3}
dict16.setdefault('a', 11)
print(dict16)
print(dict16.setdefault('b', 22))
dict16.setdefault('d', 4)
print(dict16)
print(dict16.setdefault('e', 5))
print(dict16.setdefault('f'))
运行结果:
{'a': 1, 'b': 2, 'c': 3}
2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
5
None
name in dictname
参数说明:
判断 name 是否在 dictname 中存在 key
dict17 = {'a': 1, 'b': 2, 'c': 3}
print('a' in dict17)
print('aa' in dict17)
运行结果:
True
False
dictname.copy()
注:使用此方法后,键值对的值两个字典共有,即其中一个修改键值对后,另一个字典的值页随之改变(浅拷贝);新增则不会改变
dict18 = {'a': 1, 'b': 2, 'c': 3}
d1 = dict18.copy()
print(d1)
dict18['a'] = 11
print(dict18)
print(d1)
d1['b'] = 22
print(dict18)
print(d1)
运行结果:
{'a': 1, 'b': 2, 'c': 3}
{'a': 11, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}
{'a': 11, 'b': 2, 'c': 3}
{'a': 1, 'b': 22, 'c': 3}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。