文章目录

  • 1. 字典介绍
  • 2. 创建字典
  • 3. 类型转换
  • dict() 函数
  • 4. 获取字典的值
  • get() 方法 ---获取指定键的值
  • setdefault() 方法
  • items() 方法
  • keys() 方法 ---获取所有的键名
  • values() 方法 ---获取所有的键值
  • 5. 修改字典的值
  • 修改值后的内存变化
  • 6. 更新字典
  • update() 方法
  • 7. 统计字典
  • len()方法
  • 删除字典的值
  • pop()方法
  • popitem() 方法
  • 8. 判断字典的值
  • 成员运算


1. 字典介绍

字典是一种可变数据,且可存储任意类型对象。

键值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键名不行,键名必须不可变,如元组、字符串、数字这些可以当键名,列表就不能当键名。

格式:
字典的每个键值 key=>value 对用冒号 : 分割
每个键对之间用逗号(,)分割,首尾包括在大括号 {} 中 ,格式如下所示:

	d = {key1 : value1, key2 : value2, key3 : value3 }

字典在内存的存储示意图:


2. 创建字典

  1. 创建字典如介绍中的格式就可以创建,如下
dict_a = {'name': 'XWenXiang', 'age': 15, 'hobby': 'girl'}
  1. 创建空字典,使用 {} 来创建,如下
dict_a = {}
		print(dict_a)
  1. 使用方法 fromkeys()
fromkeys() 方法用于创建一个新字典,以序列 seq 中元素做字典的键,value
为字典'所有'键对应的初始值。

fromkeys() 方法语法:

		dict.fromkeys(seq[, value])

seq -- 字典键值列表。(可以为列表、元组、字符串等等可被 for 循环的)
value -- 初始值,默认为 None。

代码示例:
		x = ['name', 'age', 'hobby']  # 将列表 x 中的值作为键名
		dict_a = dict.fromkeys(x, '6')  # 创建一个新字典 dict_a 
		print(dict_a)
打印结果:
		{'name': '6', 'age': '6', 'hobby': '6'}

'''
注意点一:
		若是将字符串作为新字典的键名,那么字符串的元素会被拆开分别当作
		键名。
		
注意点二:笔试题
		x = ['name', 'age', 'hobby']
		dict_a = dict.fromkeys(x, [])
		dict_a['name'].append('8')
		print(dict_a)

		当我们将空列表作为键值传入字典后,再去添加字典中的某一个键名的
		空列表值时,所有的空列表值都会被添加。

'''

3. 类型转换

dict() 函数

dict() 函数可以将别的类型转换为字典型。

第一种使用方式

代码示例
		x = dict(name='a', age='b', hobby='t')
		print(x)
输出结果
		{'name': 'a', 'age': 'b', 'hobby': 't'}
		
传入关键字来创建,将赋值的变量名作为键名,值作为键值传入。

第二种使用方法

使用可迭代对象创建字典

代码示例
		x = dict([('name', 'a'), ('age', 'b')])
		print(x)
输出结果
		{'name': 'a', 'age': 'b'}

用列表包含元组的形式,或者用元组来包含元组来创建字典,只要是可迭代的就行
键名和键值的值要放在同一个可迭代的数据集里。

4. 获取字典的值

第一种获取方法

字典是通过键名来访问键值的,所有我们可以通过键名获取字典的值

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a['age'])
输出结果
		15

通过键名可以取出键值。

注意点,我们通过键名可以取出键值,这个是在字典里面有该键名的情况下,若是没有该键名时,程序会报错!所以推荐使用第二种方法取值

get() 方法 —获取指定键的值

第二种获取方法

get() 函数返回指定键的值。
 get()方法语法:

		dict.get(key[, value]) 

key -- 字典中要查找的键。
value -- 可选,如果指定键的值不存在时,返回该默认值。

代码示例
		dict_a = {'name': 'XWenXiang', 'hobby': 'girl'}
		print(dict_a.get('id'))
打印结果
		None

我们可以看到和通过键名直接查找不同,用 get() 函数来查找不存在的键名时,
返回的时 None,而不是报错,所以推荐使用


我们也可以改变 value 的值来改变当没有此键名的时候显示的内容。
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a.get('id', '我真帅'))
此时返回的值就不是 None 了。

setdefault() 方法

setdefault() 方法和 get()方法 类似, 如果指定键不存在于字典中,将会添
加键并将值设为默认值。

setdefault()方法语法:

		dict.setdefault(key, default=None)

key -- 查找的键值。
default -- 键不存在时,设置的默认键值


代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a.setdefault('name','XWenXiang'))
		print(dict_a)
输出结果
		{'age': 15, 'hobby': 'girl', 'name': 'XWenXiang'}


get() 方法只是返回默认值或者指定值,并没有把键添加进字典
而setdefault() 会把键加进字典。

items() 方法

items()方法语法:

		dict.items()

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a.items())
输出结果
		dict_items([('age', 15), ('hobby', 'girl')])

此时输出可以看成一个列表中套了元组。

但在python2中它就是一个列表为 [('hobby', 'girl'), ('age', 15)]


拓展:
    我们在对字典进行 for 循环的时候可以如下代码示例
    
    dict_a = {'age': 15, 'hobby': 'girl'}
	for i, j in dict_a.items():
	    print(i, '', end='')
	    print(j)

这样我们就可以同时获得字典的键名和键值的循环了。

keys() 方法 —获取所有的键名

keys()方法语法:

		dict.keys()

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a.keys())
输出结果
		dict_keys(['age', 'hobby'])

'''
在python3中输出为   dict_keys(['age', 'hobby'])  可以看作是列表。
而在python2中,它就是生成了列表为 ['hobby', 'age'] 。
'''

values() 方法 —获取所有的键值

values()方法语法:

		dict.values()

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a.values())
输出结果
		dict_values([15, 'girl'])

和 keys() 方法类似,在python2中就会生成一个列表。

5. 修改字典的值

我们知道可以通过键名取出键值,同样也可以通过键名来改变字典的值。

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(dict_a['age'])
		dict_a['age'] = 18
		print(dict_a['age'])
输出结果
	15
	18

我们可以直接重新赋值来改变键值。

修改值后的内存变化

修改字典的值时,字典的内存地址是不变的,变的是字典里面的键的地址。

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		print('字典的位置', id(dict_a))
		print('键名age的位置', id(dict_a['age']))
		dict_a['age'] = 18
		print('字典的位置', id(dict_a))
		print('键名age的位置', id(dict_a['age']))
打印结果
		字典的位置 2457929794560
		键名age的位置 2457928467120
		字典的位置 2457929794560
		键名age的位置 2457928467216

我们可以看到,字典的位置并没有变,只是字典里的键名指向的内存地址变了。
所以字典是可变类型。

也就是下图的连接2 断了,连接1 并没有断。

python字典包含 python 字典里面包含字典_开发语言


添加键对

我们也可以通过键名添加新的键值对

代码示例		
		dict_a = {'age': 15, 'hobby': 'girl'}
		dict_a['name'] = 'XWenXiang'
		print(dict_a)
打印结果
		{'age': 15, 'hobby': 'girl', 'name': 'XWenXiang'}

我们可以看到,原本 dict_a 上没有 name 键名,我们可以通过添加新键名对应
键值加一个键值对。

6. 更新字典

update() 方法

update() 函数把第二个字典的键值对更新到第一个字典里
update() 方法语法:

		dict.update(dict2)

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		dict_b = {'age': 18, 'name': 'XWenXiang'}
		dict_a.update(dict_b)
		print(dict_a)
输出结果
		{'age': 18, 'hobby': 'girl', 'name': 'XWenXiang'}


'''
需要注意的是,上面代码示例是把 dict_b 加到 dict_a 中,而且,dict_b中
有和 dict_a 重复的键值对,这个时候,后面的会把前面的键值对给更新修改掉
'''

7. 统计字典

len()方法

和列表一样,字典也可以统计键值对的个数
		
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(len(dict_a))

返回的是键值对的个数。

删除字典的值

删除字典的值我们可以用最简单暴力的 del 来删除

通过 del 字典的键名可以删除此键名对应的键值对。

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		del dict_a['age']
		print(dict_a)
输出结果
		{'hobby': 'girl'}

此时,键名为 age 的键对已经被删除。

pop()方法

和列表一样,字典也可以用 pop() 方法来删除值。

pop()方法语法:

		pop(key[,default])

key: 要删除的键值
default: 如果没有 key,返回 default 值
'若是没有指定的键名,会返回设定好的 default 值。'

代码示例
		dict_a = {'age': 15, 'hobby': 'girl'}
		dict_a.pop('age')
		print(dict_a)
输出结果
		{'hobby': 'girl'}

结果和 del 删除的方法一样,不同的是 pop 方法是弹出,没有完全删除,还可
以利用利用。

注意点,使用 pop() 方法弹出键值对时,若是没有在字典里找到指定的键名,程序会报错。

popitem() 方法

和 pop()方法相似,不过它时随机返回并删除字典中的最后一对键和值。

popitem()方法语法:

		popitem()

'注意点,该方法里面没有参数,而且若是字典为空时,程序会报错。'

8. 判断字典的值

成员运算

in  判断指定键名或者指定键值是否在字典里

代码示例一 :判断是否在字典所有的键名里
		dict_a = {'age': 15, 'hobby': 'girl'}
		print('name' in dict_a)
输出结果
		False

代码示例二 :判断是否在字典所有的键值里
		dict_a = {'age': 15, 'hobby': 'girl'}
		print(15 in dict_a.values())
输出结果
		True