python 字典
字典:无序、key天生去重,查询效率高
字典方法:
1.clear() 清除字典中所有项
2.get() 访问字典键值
3.items() 将字典中的所有项以列表方式返回,列表中的每一项都表示为(键,值)
4.pop() 获取指定键的值,然后将这个键值对从字典中删除
5.update() 利用一个字典项更新另外一个字典
6.values() 返回字典中的值
7.setdefault 与get方法类似,能在不包含给定键时设定默认值。
定义字典
city = {'北京': {'东城': {'东单': '东方新天地'}}}
查询字典
print(city['北京']) {'东城': {'东单': '东方新天地'}} print(city['北京']['东城']) {'东单': '东方新天地'} print(city['北京']['东城']['东单']) 东方新天地
查询不存在的key
print(city['上海']) Traceback (most recent call last): File "<input>", line 1, in <module> KeyError: '上海'
key不存在时,显示0:表示没有这个键,默认返回None
get() print(city.get('上海',0)) 0 setdefault() print(city.setdefault('上海','0')) 0
添加字典键值
添加北京东城王府井百货大楼 city['北京']['东城']['王府井'] = '百货大楼' city {'北京': {'东城': {'东单': '东方新天地', '王府井': '百货大楼'}}} 添加北京西城平安大街南锣鼓巷 city['北京']['西城']= {'平安大街':'南锣鼓巷'} city {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}
pop,删除字典键值
删除北京东城东单东方新天地 city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}} print(city['北京']['东城'].pop('东单')) 东方新天地 print(city) {'北京': {'东城': {'王府井': '百货大楼'}, '西城': {'平安大街': '南锣鼓巷'}}}
popitem,随机删除一个键值
city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方新天地'}}} city['北京']['东城'].popitem() print(city) {'北京': {'东城': {'东单': '东方新天地'}, '西城': {'平安大街': '南锣鼓巷'}}}
del 指定key进行删除
city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}} del city['北京']['西城'] print(city) {'北京': {'东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}
修改字典键值
直接修改
city['北京']['东城']['东单'] = '东方广场' city {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}}
update,利用一个字典项更新另外一个字典,相当于合并字典。
c1 = {} c1['东单'] = '东方新天地' city['北京']['东城'].update(c1) city {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方新天地'}}}
查看字典的键
for i in city.keys(): print(i) 北京
查看字典的值
for i in city.values(): print(i) {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}
迭代字典,第一种效率高于第二种
第一种
for i in city: print(i,'\n','\t',city[i]) 北京 {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}
第二种
for i, j in city.items(): print(i, '\n\t', j) 北京 {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}
fromkeys: 把列表每个值取出来当成key,并指定value.
定义列表 city = ['北京', '上海', '深圳'] 生成字典,键值为0 city_1 = dict.fromkeys(city, 0) print(city_1) {'北京': 0, '上海': 0, '深圳': 0} 查看字典键值 print(city_1['北京']) 0 print(city_1['上海']) 0 print(city_1['深圳']) 0 查看字典三个key的内存地址,此时三个key在内存中的地址一样。 print(id(city_1['北京'])) 4311538624 print(id(city_1['上海'])) 4311538624 print(id(city_1['深圳'])) 4311538624 修改键值 city_1['北京'] = '010' city_1['上海'] = '021' city_1['深圳'] = '022' 查看键值,不用的key对应不同的value print(city_1['北京']) 010 print(city_1['上海']) 021 print(city_1['深圳']) 022 查看键值修改后的内存地址,此时三个key的内存地址已经不一样。 print(id(city_1['北京'])) 4324269560 print(id(city_1['上海'])) 4324413032 print(id(city_1['深圳'])) 4324412808
同样的方法,不同的是键值指定为一个列表
city = ['北京', '上海', '深圳'] city ['北京', '上海', '深圳'] city_1 = dict.fromkeys(city,[1,2,3]) city_1 {'北京': [1, 2, 3], '上海': [1, 2, 3], '深圳': [1, 2, 3]} 查看键值,发现上海和深圳的value也跟同北京一起被修改了。 city_1['北京'][0] = '010' print(city_1['北京']) ['010', 2, 3] print(city_1['上海']) ['010', 2, 3] print(city_1['深圳']) ['010', 2, 3] 查看内存地址,发现北京、上海、深圳的内存地址是一样的。 print(id(city_1['北京'])) 4324526472 print(id(city_1['上海'])) 4324526472 print(id(city_1['深圳'])) 4324526472 总结:修改列表中的元素不会改变列表本身的内存地址,也就是对于key(北京、上海、深圳)对应的内存地址依然相同。
字符串-列表-字典之间转换
# 字符串转成列表 c = '北京,上海,深圳' c_list = c.split(',') print(c_list) # 列表转成字符串 print(','.join(c_list)) # 列表转成字典 print(dict.fromkeys(c_list, 1)) # 字符串转成字典 n = '1, 2, 3' print(dict(zip(c.split(','), n.split(',')))) # 字典到列表 d = {'北京': '1', '上海': ' 2', '深圳': ' 3'} res_k = [] d_key = d.keys() for i in d_key: res_k.append(i) print(res_k) res_v = [] d_v = d.values() for i in d_v: res_v.append(i) print(res_v)