参考:
数据基本操作
http://www.runoob.com/python/python-dictionary.html
1. 基本操作
- word_index = {k: (v+3) for k, v in word_index.items()}
在字典开头插入4个数据,所有字典对应的整数位置都+3 - reverse_word_index = dict([(value, key) for (key, value)
in word_index.items()])
字典操作:将k和v进行转化 - for word in word_index:print(word) # word表示每个key的值
- for k,v in word_index.items():print(k,v) # 键值对输出k为key,v为values
- word_index.key() # 获取字典的key
- word_index.values() # 获取字典的values
2. 增删改查
2 .1 增
- 直接添加:dic[‘add’]=‘value’,直接对添加key:‘add’,values:‘value’
- 通过setdefault(),setdefault()存在返回值,如果字典已有不会重复添加,dic.setdefault(‘add’,‘value’),只要key中存在add,无论数字是否相同,都不操作
dict1 ={'a':345,'b':456}
dict1.setdefault('a',1234)
# dict1:{'a': 345, 'b': 456}
dict1.setdefault('a',1234)
# dict1:{'a': 345, 'b': 456}
dict1.setdefault('c',123)
# dict1:{'a': 345, 'b': 456, 'c': 1234}
2.2 删
- del dic[‘add’] #删除add对应的键值和值,不用重新赋值
- dic.pop(‘a’) # 输出结果为a键对应的345,不用重新赋值 的值,dic中已经没有‘a’
- dic.clear() # 清空整个字典,不用重新赋值
- dict1.popitem() # 删除最后一个key-value值,显示为删除的的值
2.3 修
- 直接赋值dic[‘a’]=‘change’
- dic.update({‘a’:change}),以字典形式修改,键值对
2.4 查
- dict[‘key’],key字典键值
- 基本操作2,5,6
3. dict.get() 方法
Python 字典(Dictionary) get():根据键查找数据, 函数返回指定键的值,如果值不在字典中返回默认值。
dict.get(key, default=None)# key 为查找的主键,None如果没有返回none
exp:
reverse_word_index.get(i, '?') for i in text # 从text中获取每个词,将与字典对应,如果没有返回?
4. 字典排序
参考:
1.对字典进行排序
排序,按照数据字典的value值
def sort_dict(data):
"""#返回结果为list列表,从小到大"""
# 获取字典key
key = data.keys()
# 获取字典values
value = data.values()
# zip 组合新字典
dict_new = zip(value,key)
# 按value进行排序,依据zip函数值的先后顺序,reverse表示列表是否翻转
return sorted(dict_new, reverse=True)
2.对key值进行排序
def sort_dict_key(data):
# 按key进行排序,reverse 表示列表是否翻转,x[0] 取的是data.items()中对应字典的key值
return sorted(data.items(), key=lambda x: x[0], reverse=True)
3.对values进行排序
def sort_dict_value(data):
return sorted(data.items(),key=lambda x:x[1],reverse=True)
5.字典添加数据
参考:
- 直接操作赋值
def add_dict_value():
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
dic = dict()
for value in all_items:
if value > 24 :
if "k1" in dic.keys():
dic["k1"].append(value)
else:
dic["k1"] = [value]
else:
if "k2" in dic.keys():
dic["k2"].append(value)
else:
dic["k2"] = [value]
return dic
# output
# {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, [56, 78]]}
- 借助setdefault
def add_dict2(all_items):
dic =dict()
for lt in all_items:
if lt >=45:
# setdefault('k1',[]).append() 中的[] 不可以省略
dic.setdefault('k1',[]).append(lt)
else:
dic.setdefault('k2',[]).append(lt)
# print(dic)
return dic
- 借助defaultdic --> 推荐使用
import collections
def add_dict3(self,all_items):
# 创建value值直接为list的字典,还可以甚至int型和set类型
dic = collections.defaultdict(list)
for lt in all_items:
if lt>=45:
dic['k1'].append(lt)
else:
dic['k2'].append(lt)
return dic
4.# 借助fromkeys方法
def add_dict4(self,all_items):
# 先创建好key值
dic = dict.fromkeys(('k1','k2'))
for lt in all_items:
if lt >= 45:
# 判断是否存在键,存在append添加,不存在list赋值
if dic['k1'] is None:
dic['k1']=[lt]
else:
dic['k1'].append(lt)
else:
if dic['k2'] is None:
dic['k2']=[lt]
else:
dic['k2'].append(lt)
return dic
6. 字典的多层嵌套
使用zip动态生成
dict1={'http': 801, 'ftb': 301, 'ssh': 401, 'https': 801, 'ftbs': 301}
list1 =[dict1 for _ in range(5)]
list2 =['a','b','c','d']
dict(zip(list2,list))
#
#{'a': {'http': 801, 'ftb': 301, 'ssh': 401, 'https': 801, 'ftbs': 301},
# 'b': {'http': 801, 'ftb': 301, 'ssh': 401, 'https': 801, 'ftbs': 301},
# 'c': {'http': 801, 'ftb': 301, 'ssh': 401, 'https': 801, 'ftbs': 301},
# 'd': {'http': 801, 'ftb': 301, 'ssh': 401, 'https': 801, 'ftbs': 301}}
# # 临时处理
# try:
# # 将字典主键'field'修改为'fields'
# alter_json['fields'] =alter_json.pop('field')
# except Exception as ex:
# logger.debug('field is not in json_data!')
总结
本文主要介绍了python中dict类型数据的常用操作,dict是通过键值对的方式保存的数据。基础操作主要为key和value的提取,增删改查为dict数据的具体使用,同时进一步介绍了字典的排序以及数据的添加和字典的多层嵌套的具体使用。