python_字典

**

字典

**

字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。

字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value。

创建字典

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict1 = { 'abc': 456, 98.6: 37 }
dict2 = {}  # 定义空字典也是允许的

键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

访问字典值

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "dict['Name']: ", dict['Name']  # dict['Name']:  Zara
print "dict['Age']: ", dict['Age']  # dict['Age']:  7
print(dict['Alice']: )
如果用字典里没有的键访问数据,会输出错误如下:KeyError: 'Alice'

修改字典元素

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry
 
print "dict['Age']: ", dict['Age']; # dict['Age']:  8
print "dict['School']: ", dict['School']; # dict['School']:  DPS School

删除字典元素

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
del dict['Name']; # 删除键是'Name'的条目
dict.clear();     # 清空字典所有条目
del dict ;        # 删除字典
 
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
 因为用del后字典不再存在:TypeError: 'type' object is unsubscriptable

字典特性
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例

 
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
 
print "dict['Name']: ", dict['Name']; #dict['Name']:  Manni

2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:

dict = {['Name']: 'Zara', 'Age': 7};
 
print "dict['Name']: ", dict['Name']; #TypeError: list objects are unhashable

字典常用方法

clear()

	clear() 用于清空字典中所有的 key-value 对.
	对一个字典执行 clear() 方法之后,该字典就会变成一个空字典。
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
print(cars)  # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
cars.clear() # 清空cars所有key-value对
print(cars) # {}

get()

	get() 根据key来获取value,当使用[]语法访问并不存在的key,字典会引发KeyError错误;
	但如果使用get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误。

cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 获取'BMW'对应的value
print(cars.get('BMW')) # 8.5
print(cars.get('PORSCHE')) # None
print(cars['PORSCHE']) # KeyError

copy()

	copy() 用于返回一个字典的浅拷贝。

list1 = ['Author', 'age', 'sex']
list2 = ['Python', 99, '男']
dic1 = dict(zip(list1, list2))

dic2 = dic1 # 浅拷贝: 引用对象
dic3 = dic1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dic1['age'] = 18

# dic1 = {'Author': 'Python', 'age': 18, 'sex': '男'}
# dic2 = {'Author': 'Python', 'age': 18, 'sex': '男'}
# dic3 = {'Author': 'Python', 'age': 99, 'sex': '男'}

copy.deepcopy()

	拓展深拷贝:copy.deepcopy()
import copy

list1 = ['Author', 'age', 'sex']
list2 = ['Python当打之年', [18,99], '男']
dic1 = dict(zip(list1, list2))

dic2 = dic1
dic3 = dic1.copy()
dic4 = copy.deepcopy(dic1)
dic1['age'].remove(18)
dic1['age'] = 20

# dic1 = {'Author': 'Python', 'age': 20, 'sex': '男'}
# dic2 = {'Author': 'Python', 'age': 20, 'sex': '男'}
# dic3 = {'Author': 'Python', 'age': [99], 'sex': '男'}
# dic4 = {'Author': 'Python', 'age': [18, 99], 'sex': '男'}

update()

	update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。
	在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;
	如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去
	
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
cars.update({'BMW':4.5, 'PORSCHE': 9.3})
print(cars)

items()、keys()、values()

	items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value。
	这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象
	Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。
	
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
ims = cars.items()    # 获取字典所有的key-value对,返回一个dict_items对象
print(type(ims))      # <class 'dict_items'>
print(list(ims))      # 将dict_items转换成列表输出
print(list(ims)[1])   # ('BENS', 8.3) # 访问第2个key-value对
kys = cars.keys()     # 获取字典所有的key,返回一个dict_keys对象
print(type(kys))      # <class 'dict_keys'>
print(list(kys))      # ['BMW', 'BENS', 'AUDI'] # 将dict_keys转换成列表
print(list(kys)[1])   # 'BENS' # 访问第2个key
vals = cars.values()  # 获取字典所有的value,返回一个dict_values对象
print(type(vals))     # [8.5, 8.3, 7.9] # 将dict_values转换成列表
print(list(vals)[1])  # 8.3 # 访问第2个value

pop()

	pop() 方法用于获取指定key对应的 value,并删除这个 key-value 对。 

cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
print(cars.pop('AUDI')) # 7.9
print(cars) # {'BMW': 8.5, 'BENS': 8.3}

popitem()

	popitem() 方法用于随机弹出字典中的一个key-value 对

cars = {'AUDI': 7.9, 'BENS': 8.3, 'BMW': 8.5}
print(cars)
print(cars.popitem()) # ('AUDI', 7.9)
print(cars) # {'BMW': 8.5, 'BENS': 8.3}
# 由于字典键值对是无序的,感觉是随机删除,其实弹出字典底层存储的最后一个key-value对

setdefault()

	setdefault() 方法也用于根据 key 来获取对应 value 的值。
	获取的key在字典中不存在时,该方法会先为不存在的key设置一个默认的value,再返回该key对应的value

cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 设置默认值,该key在dict中不存在,新增key-value对
print(cars.setdefault('PORSCHE', 9.2)) # 9.2
# 设置默认值,该key在dict中存在,不会修改dict内容
print(cars.setdefault('BMW', 3.4)) # 8.5

fromkeys()

	fromkeys()使用给定的多个key创建字典,这些key对应的value默认是None;也可传入一个参数作为默认的值 
	该方法一般不会使用字典对象调用(没什么意义),通常会使用 dict 类直接调用
	
# 使用列表创建包含2个key的字典
a_dict = dict.fromkeys(['a', 'b'])
print(a_dict) # {'a': None, 'b': None}
# 使用元组创建包含2个key的字典
b_dict = dict.fromkeys((13, 17))
print(b_dict) # {13: None, 17: None}
# 使用元组创建包含2个key的字典,指定默认的value
c_dict = dict.fromkeys((13, 17), 'good')
print(c_dict) # {13: 'good', 17: 'good'}

in,not in

	判断字典包含某个key 或 key不在字典中
	
dict1 = dict.fromkeys(('Author', 'age', 'sex'))
print("a" in dict1) # False
print("a" not in dict1) # True

使用字典格式化字符串

# 字符串模板中使用key
temp = '图书是:%(name)s, 价格是:%(price)010.2f, 出版社是:%(publish)s'
book = {'name':'Python基础教程', 'price': 99, 'publish': '当当网'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
book = {'name':'一剑仙人跪', 'price':159, 'publish': '雪中悍刀行'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值