前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据类型(字典-Dictionary)_005

Python数据类型(字典-Dictionary)_005

原创
作者头像
留给昨天、
发布2024-10-30 10:03:21
830
发布2024-10-30 10:03:21
举报
文章被收录于专栏:python

字典-Dictionary

无序的、可变的序列,其元素以“键值对(key-value)”的形式存储

字典类型是 Python 中唯一的映射类型(通过一个元素,可以唯一找到另一个元素)

主要特征

解释

通过键而不是通过索引来读取元素

字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。

字典是任意数据类型的无序集合

和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。

字典是可变的,并且可以任意嵌套

字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。

字典中的键必须唯一

字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。

字典中的键必须不可变

字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。

一、创建字典

  • 字典中每个元素都包含两部分,分别是键(key)和值(value)
  • 同一字典中的各个键必须唯一,不能重复
  • 字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;字典的值可以是 Python 支持的任意数据类型

1、使用 { } 创建字典

  • 语法
代码语言:txt
复制
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}

参数说明:
dictname 表示字典变量名
keyn : valuen 表示各个元素的键值对
  • 举例
代码语言:python
代码运行次数:0
复制
dict1 = {'姓名': '小明', '住址': '北京'}
print(dict1)

dict2 = {('AA', '张三'): 100, '分数': [69,90]}
print(dict2)

dict3 = {}

print(dict3)

运行结果:

{'姓名': '小明', '住址': '北京'}

{('AA', '张三'): 100, '分数': [69, 90]}

{}

2、通过 fromkeys() 方法创建字典

  • 语法
代码语言:txt
复制
dictname = dict.fromkeys(list,value=None)

参数说明:
list 参数表示字典中所有键的列表(list)
value 参数表示默认值,如果不写,则为空值 None
注:常用于初始化字典,设置 value 的默认值
  • 举例
代码语言:python
代码运行次数:0
复制
list1 = ['语文', '数学', '英语']
dict4 = dict.fromkeys(list1, 80)
print(dict4)

运行结果:

{'语文': 80, '数学': 80, '英语': 80}

3、通过 dict() 映射函数创建字典

  • 常用:

创建格式

注意事项

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删除

  • 语法
代码语言:javascript
复制
del dictname 
  • 举例
代码语言:python
代码运行次数:0
复制
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'?

三、增加字典(键值对)

  • 语法
代码语言:txt
复制
dictname[key] = value

参数说明:
dictname 表示字典名称
key 表示新的键
value 表示新的值,只要是 Python 支持的数据类型都可以
  • 举例
代码语言:python
代码运行次数:0
复制
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}

四、删除字典(键值对)

1、pop() 方法

  • 删除指定键值对
  • 语法
代码语言:txt
复制
dictname.pop(key)

参数说明:
dictname 表示字典名称
key 表示键
注:删除不存在的键值对会报错
  • 举例
代码语言:python
代码运行次数:0
复制
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'

2、popitem() 方法

  • 可简单理解为从字典中删除并返回最后一个键值对
  • 语法
代码语言:txt
复制
dictname.popitem()

注:返回类型为元组 tuple
  • 举例
代码语言:python
代码运行次数:0
复制
dict8 = {'a': 1, 'b': 2, 'c': 3}
a = dict8.popitem()
print(a)
print(type(a))

运行结果:

('c', 3)

<class 'tuple'>

五、修改字典(键值对)

  • 键(key)的名字不能被修改,我们只能修改值(value)
  • 各元素的键必须是唯一的,如果新添加元素的键与已存在元素的键相同,那么键所对应的值就会被新的值替换掉,以此达到修改元素值的目的

1、通过key修改value值

  • 语法
代码语言:txt
复制
dicname['key'] = new_key

参数说明:
dicname:字典名称
key:需要修改的字典的key
new_value:修改后的新的值
  • 举例
代码语言:python
代码运行次数:0
复制
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}

2、update() 方法

  • 可以使用一个字典所包含的键值对来更新己有的字典
  • 语法
代码语言:txt
复制
dictname.update(dict)
  • 举例
代码语言:python
代码运行次数:0
复制
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}

六、查询字典(键值对)

1、通过键来访问对应的值

  • 语法
代码语言:javascript
复制
dictname[key]

参数说明:
dictname 表示字典变量的名字
key 表示键名

注:键必须是存在的,否则会抛出异常
  • 举例
代码语言:python
代码运行次数:0
复制
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'

2、get() 方法来获取指定键对应的值

  • 语法
代码语言:javascript
复制
dictname.get(key,default)

参数说明:
dictname 表示字典变量的名字
key 表示指定的键
default 用于指定要查询的键不存在时,此方法返回的默认值,如果不手动指定,会返回 None
  • 举例
代码语言:python
代码运行次数:0
复制
dict12 = {'a': 1, 'b': 2, 'c': 3}
print(dict12.get('a'))
print(dict12.get('d'))
print(dict12.get('d', 4))

运行结果:

1

None

4

3、keys()、values() 和 items() 方法

1)Python 2.x 中,上面三个方法的返回值都是列表(list)类型

2)Python 3.x 中,它们的返回值并不是我们常见的列表或者元组类型,因为 Python 3.x 不希望用户直接操作这几个方法的返回值。

  • 以上3种方法在3.x的使用
代码语言:python
代码运行次数:0
复制
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() 函数,将它们返回的数据转换成列表

  • 举例
代码语言:python
代码运行次数:0
复制
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 循环遍历它们的返回值

  • 举例
代码语言:python
代码运行次数:0
复制
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)

-----------------------

4、setdefault() 方法

  • 语法
代码语言:txt
复制
dictname.setdefault(key, defaultvalue)

参数说明:
dictname 表示字典名称
key 表示键
defaultvalue 表示默认值(可以不写,不写的话是 None)
注:当指定的 key 不存在时,setdefault() 会先为这个不存在的 key 设置一个默认的 defaultvalue,然后再返回 defaultvalue
  • 举例
代码语言:python
代码运行次数:0
复制
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

七、判断是否存在键值对

  • 判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键
  • 判断字典是否包含指定键值对的键,可以使用 in 或 not in 运算符
  • 语法
代码语言:txt
复制
name in dictname

参数说明:
判断 name 是否在 dictname 中存在 key
  • 举例
代码语言:python
代码运行次数:0
复制
dict17 = {'a': 1, 'b': 2, 'c': 3}
print('a' in dict17)
print('aa' in dict17)

运行结果:

True

False

八、复制字典

1、copy() 方法

  • 语法
代码语言:txt
复制
dictname.copy()

注:使用此方法后,键值对的值两个字典共有,即其中一个修改键值对后,另一个字典的值页随之改变(浅拷贝);新增则不会改变
  • 举例
代码语言:python
代码运行次数:0
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字典-Dictionary
  • 一、创建字典
    • 1、使用 { } 创建字典
      • 2、通过 fromkeys() 方法创建字典
        • 3、通过 dict() 映射函数创建字典
        • 二、删除字典
          • del删除
          • 三、增加字典(键值对)
          • 四、删除字典(键值对)
            • 1、pop() 方法
              • 2、popitem() 方法
              • 五、修改字典(键值对)
                • 1、通过key修改value值
                  • 2、update() 方法
                  • 六、查询字典(键值对)
                    • 1、通过键来访问对应的值
                      • 2、get() 方法来获取指定键对应的值
                        • 3、keys()、values() 和 items() 方法
                          • 4、setdefault() 方法
                          • 七、判断是否存在键值对
                          • 八、复制字典
                            • 1、copy() 方法
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档