一, 介绍
dict 的用法比较简单, 它可以存储任意值, 并允许是不同类型的值, 下面实例来说明:
下面例子中 a 是整数, b 是字符串, c 是数组, 这个例子充分说明哈希数组的适用性.
每一个元素是 pair, 包含 key,value 两部分. key 是 Integer 或 string 类型, value 是任意类型.
键是唯一的, 字典只认最后一个赋的键值.
不允许同一个键出现两次. 创建时如果同一个键被赋值两次
二, 字典初始化
1, 普通赋值方法
- print("===="*5,"dict init")
- dic1 = {
- 'a': 100, 'b':'boy', 'c':['o', 'p', 'q']
- }
- print(type(dic1))
- print("dic1:",dic1)
- # 可以直接增加一个元素, 如果同名, 则会改变原来的 key 的元素的值
- dic1['d'] = 'dog'
- dic1['c'] = 111 # 更新'c'
- print("dic1:",dic1)
- # 键必须不可变, 所以可以用数字, 字符串或元组充当, 而用列表就不行
- dic2 = {
- 'a': 1
- }
- print ("dic2:", dic2)
- dic2 = {
- ('a'): 1
- }
- print ("dic2:", dic2)
- dic2 = {
- ('a','b'): 1
- }
- print ("dic2:", dic2)
- #dic2 = {
- ['a']: 1
- } #error
2, 元组初始化方法
- print("===="*5,"touple init")
- tuple1 = ('name', 'age', 'sex')
- dict1 = dict.fromkeys(tuple1)
- print ("新的字典为: %s" % str(dict1))
- dict1 = dict.fromkeys(tuple1, 10)
- print ("新的字典为: %s" % str(dict1))
- dict1 = dict.fromkeys(tuple1, [1,2,3])
- print ("新的字典为: %s" % str(dict1))
三, 字典的引用遍历合并
- print("===="*5,"key and value")
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- # 输出所有的 key
- print("keys:",dic1.keys())
- print(type(dic1.keys()))
- # 输出所有的 value
- print("values:",dic1.values())
- print(type(dic1.values()))
- # 同 dict[key], 多了个没有则返回缺省值, 0.[]没有则抛异常
- print(dic1.get('a',"don not find"))
- print(dic1.get('z',"don not find"))
- print(dic1.get('z'))
- print('a' in dic1)
- # 遍历
- for k in dic1:
- print(dic1.get(k))
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- print ("a 键的值为: %s" % dic1.setdefault('a', 'ff'))
- print ("d 键的值为: %s" % dic1.setdefault('d', 'ff'))
- print ("新字典为:", dic1)
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- print (type(dic1.items()))
- print ("Value : %s" % dic1.items())
- for i,j in dic1.items():
- print(i, ":\t", j)
- # 计算字典元素个数, 即键的总数
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- print("len:",len(dic1))
- # 输出字典, 以可打印的字符串表示.
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- print("str:",str(dic1))
- # 增加合并字典
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- dic2 = {
- 'd':4,'e':5,'f':6
- }
- dic1.update(dic2) #不可以使用加法
- print("dic1:",dic1)
四, 字典的浅复制
# 返回一个字典的浅复制
print,ThinkMarkets 返佣 http://www.kaifx.cn/broker/thinkmarkets.html("===="*5,"copy")
- dic1 = {
- 'a':1,'b':[2,3,4],'c':3
- }
- dic2 = dic1 # 浅拷贝: 引用对象
- dic3 = dic1.copy() # 浅拷贝: 深拷贝: 父对象 (一级目录), 子对象(二级目录) 不拷贝, 还是引用
- # 修改 data 数据
- dic1['a']=100
- dic1['b'].remove(2)
- # 输出结果
- print(dic1)
- print(dic2)
- print(dic3)# 存在浅拷贝
五, 字典删除
- # 删除
- print("===="*5,"del")
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- dic2 = {
- 'd':4,'e':5,'f':6
- }
- dic3 = {
- 'g':7,'h':8,'i':9
- }
- dic2.clear() #清空字典 后为空字典 还属于有定义状态 删除字典内所有元素
- print("dic2:",dic2)
- print(type(dic2.keys()))
- del dic3['g']
- print("dic3:",dic3)# 删除 dic 后属于没有定义状态会报错
- del dic3
- #print("dic3:",dic3)# 删除 dic 后属于没有定义状态会报错
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- pop_obj=dic1.popitem()
- print(pop_obj)
- print(dic1)
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- pop_obj=dic1.pop('a')
- print(pop_obj)
- print(dic1)
- dic1 = {
- 'a':1,'b':2,'c':3
- }
- pop_obj=dic1.pop('d','none')
- print(pop_obj)
- print(dic1)
六, python dict 内存使用
def write_data_to_dict(key,data):
将数据放入字典
- if not data:
- return []
- d_dict[md5(key)] = data
- if md5(key) in d_dict.keys():
- d_dict.update(d_dict)
- return d_dict[md5(key)]
- def get_data_from_dict(key):
从字典中取出数据
- if not key:
- return []
- if md5(key) in d_dict.keys():
- return d_dict.setdefault(md5(key), {
- })
来源: http://www.bubuko.com/infodetail-3185909.html