字典(dict)是一系列键——值对。每个键都与一个值相关联,这个值可以是Python中的任何对象。
可以通过“键对象”实现快速获取,删除,更新对应的键值对象。
“键”-"值"就像身份证号码与你,你的名字可以有很多人和你一样,你也可以随便改名,但是,你的身份证号码不能变,不然没法找到你这个人。因此,字典中的"键"值不能变,所以不能是列表,字典,集合等可变对象;值可以改变,所以可以是Python中任意对象。
1. 创建字典
- 基础版
a = {'color': 'blue', 'size': 20, 'font': 'Simsun'}
print(a) # {'color': 'blue', 'size': 20, 'font': 'Simsun'}
- 基础版2.0
a = dict(name='tom', age=18, job='doctor')
print(a) # {'name': 'tom', 'age': 18, 'job': 'doctor'}
- 基础版3.0
a = dict([("langue", ["Python", "C++"]), ("name", "tom")])
print(a) # c = dict([("name", "tom"), ("age", 18)])
- 基础版4.0
k = ["a", "b", "c"]
v = [100, 200, 300]
f = dict(zip(k, v))
print(f) # {'a': 100, 'b': 200, 'c': 300}
-进阶版
a = dict.fromkeys(['name', 'age', 'job'])
a['name'] = 'tom'
print(a) # {'name': 'tom', 'age': None, 'job': None}
- 进阶版2.0(推导式)
{key_expression : value_expression for 表达式 in 可迭代对象}
my_text = 'i love you, i love python, i love china'
char_count = {c: my_text.count(c) for c in my_text}
print(char_count)
# {'i': 4, ' ': 8, 'l': 3, 'o': 5, 'v': 3, 'e': 3, 'y': 2, 'u': 1, ',': 2, 'p': 1, 't': 1, 'h': 2, 'n': 2, 'c': 1, 'a': 1}
2. 增加
# 如果键存在,就覆盖,不存在就新增
a = dict.fromkeys(['name', 'age', 'job'])
a['name'] = 'tom'
a['money'] = 'rich'
print(a) # {'name': 'tom', 'age': None, 'job': None, 'money': 'rich'}
a['name'] = 'jack'
print(a) # {'name': 'jack', 'age': None, 'job': None, 'money': 'rich'}
3. 删除
字典中元素的删除使用del()方法;或者clear()删除所有键值对;pop()删除指定键值对,并返回对应的’值对象’;popitem()是随机删除并返回该键值对(一般为最后加入的键值对)
# del
a = dict(name='tom', age=18, job='doctor')
del(a['name'])
print(a) # {'age': 18, 'job': 'doctor'}
# clear
a = dict(name='tom', age=18, job='doctor')
a.clear()
print(a) # {}
# pop
a = dict(name='tom', age=18, job='doctor')
b = a.pop('name')
print(a) # {'age': 18, 'job': 'doctor'}
print(b) # tom
# popitem
a = dict(name='tom', age=18, job='doctor')
print(a.popitem()) # ('job', 'doctor')
print(a) # {'name': 'tom', 'age': 18}
3. 修改
使用update()将新字典中所有键值对全部添加到旧字典对象上。如果键有重复,直接覆盖
a = dict(name='tom', age=18, job='doctor')
b = dict(name='jack', money='rich', speed='slow')
a.update(b)
print(a) # {'name': 'jack', 'age': 18, 'job': 'doctor', 'money': 'rich', 'speed': 'slow'}
4. 字典元素的访问
1、通过[键]获得“值”。若键不存在,则抛出异常
a = dict(name='tom', age=18, job='doctor')
print(a['name']) # tom
2、通过get()获取值,优点:指定键不存在时,返回none
a = dict(name='tom', age=18, job='doctor')
print(a.get('age')) # 18
3、items()列出所有的键值对
a = dict(name='tom', age=18, job='doctor')
print(a.items()) # dict_items([('name', 'tom'), ('age', 18), ('job', 'doctor')])
3、keys()列出所有的键,values()列出所有的值
a = dict(name='tom', age=18, job='doctor')
print(a.keys()) # dict_keys(['name', 'age', 'job'])
print(a.values()) # dict_values(['tom', 18, 'doctor'])
5. 遍历字典
- 遍历键值对
user = {
'username': 'python',
'password': 'hello',
'age': '18'
}
for keys, values in user.items():
print("keys:" + keys)
print("valeus:" + values + '\n')
'''
keys:username
valeus:python
keys:password
valeus:hello
keys:age
valeus:18
'''
- 遍历键
user = {
'username': 'python',
'password': 'hello',
'age': '18'
}
for key in user.keys():
print('key:' + key)
'''
key:username
key:password
key:age
'''
6. 嵌套
- 字典列表
aliens =[]
for alien_number in range(30):
new_alien = {'color': 'red', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[:5]:
print(alien)
print(len(aliens)) # 30
- 字典内嵌套字典
users = {
'jack': {
'age': 18,
'job': 'doctor',
'money': 'rich'
},
'tom': {
'age': 18,
'job': 'teacher',
'money': 'rich'
}
}
for user_name, user_info in users.items():
print('username:' + user_name)
print('userjob:' + user_info['job'])
print('usermoney:' + user_info['money'])