python字典与集合

python字典

特点:

  • python中唯一的映射类型就是字典。
  • 在映射类型对象里,hash值(key)和指向的对象(值)是一对多的关系。
  • 字典对象是可变的,这和列表有点类似,它可以存储任意类型的python对象,其中包括容器类型。字典类型和序列类型的区别是存储和访问数据的方式不同。序列类型只用数字类型的键(从序列开始按数值顺序索引)。映射类型的键(key)可以是其他的对象类型(一般是字符串)。映射类型的键直接或间接的和存储的数据值相关联。而在映射类型中,数据是无序排列。

格式:一个字典条目的语法格式是,键(key):值(value),例如

{'name':'xyz','age':28,'birthday':'2000-01-01'}

字典的创建:用四种不同的方式去创建字典

dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
dic_2 = dict({'name':'xyz','age':28,'birthday':'2000-01-01'})
dic_3 = dict(name = 'xyz',age = 28,birthday = '2000-01-01')
dic_4 = dict([('name','xyz'),('age',28),('birthday','2000-01-01')])
print(dic_1)
print(dic_2)
print(dic_3)
print(dic_4)
print('4个字典是否相同:',dic_1 == dic_2 == dic_3 == dic_4)
{'name': 'xyz', 'age': 28, 'birthday': '2000-01-01'}
{'name': 'xyz', 'age': 28, 'birthday': '2000-01-01'}
{'name': 'xyz', 'age': 28, 'birthday': '2000-01-01'}
{'name': 'xyz', 'age': 28, 'birthday': '2000-01-01'}
4个字典是否相同: True

字典基本操作

  1. len(d):返回字典的键值对的长度。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(len(dic_1))
3
  1. d[k]:获取k这个key对应的值,没有k对应的值时,抛出异常。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1['name'])
print(dic_1['na'])
xyz

KeyError                                  Traceback (most recent call last)
 in 
      1 dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
----> 2 print(dic_1['na'])

KeyError: 'na'
  1. d[k] = v:改变键为k的值为v,如果字典中不存在键为k的对象,那么自动的添加进去。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
dic_1['name'] = 'bob'
print(dic_1)
{'name': 'bob', 'age': 28, 'birthday': '2000-01-01'}
  1. del d[k]:删除d这个字典中键为k的这一项数据。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
del dic_1['age']#删除age项数据
print(dic_1)
{'name': 'xyz', 'birthday': '2000-01-01'}
  1. k in d:检查d这个字典中是否包含键为k的这一项。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
'name' in dic_1 #是否存在键为name的数据
True

字典常用方法:

  1. get:访问字典中键对应个值,有的该键的话返回值,没有的话返回None。另外,这个方法不会抛出异常。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.get('name'))
print(dic_1.get('na'))
xyz
None
  1. clear:清除字典中所有的项。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
dic_1.clear()
print(dic_1)
{}
  1. in:用来判断某个键是否存在字典中。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
'name' in dic_1
True
  1. pop:用来获得对应于给定键的值,然后将这个键盘和值的项从字典中删除。会返回这个值value
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.pop('name'))#删除k为name的值
print(dic_1)
xyz#返回删除的value
{'age': 28, 'birthday': '2000-01-01'}
  1. popitem:随机的移除字典中的一项。因为字典是无序的,所以是随机的。会以元组的形式返回这个键值对
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.popitem())
print(dic_1)
('birthday', '2000-01-01')
{'name': 'xyz', 'age': 28}
  1. update:用一个字典更新另外一个字典,如果碰到相同的键,则会覆盖。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
dic_2 = dict({'name':'bob','age':33,'birthday':'1986-01-01'})
print(dic_1.update(dic_2))#将dic_1更新为dic_2
print('dic_1更新为:%s'%dic_1)
None
dic_1更新为:{'name': 'bob', 'age': 33, 'birthday': '1986-01-01'}
  1. keys:这个方法将所有的键以列表的方式返回。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.keys())#将dic——1中所有的键以列表的方式返回
for item in dic_1.keys():#遍历每一个元素
    print(item)
dict_keys(['name', 'age', 'birthday'])
name
age
birthday
  1. values:这个方法将所有的值以列表的方式返回。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.values())##将dic—1中所有的value以列表的方式返回
for item in dic_1.values():
    print(item)
dict_values(['xyz', 28, '2000-01-01'])
xyz
28
2000-01-01
  1. items:这个方法将所有的键和值以列表的方式返回。
dic_1 = {'name':'xyz','age':28,'birthday':'2000-01-01'}
print(dic_1.items())
for item in dic_1.items():
    print(item)
dict_items([('name', 'xyz'), ('age', 28), ('birthday', '2000-01-01')])
('name', 'xyz')
('age', 28)
('birthday', '2000-01-01')

python集合

定义:数学上,把set称为由不同元素组成的集合,集合(set)的成员通常被称为集合元素(set element)。python 把集合的概念引入到集合类型对象中。集合对象是一组无序排列的可哈希的值,可以理解为字典中的键。

集合和其他容器一样,集合可以用in或not in操作符检查成员,用len()得到集合的大小,用for循环迭代集合成员。但是由于集合是无序,不可以创建索引或者是切片操作,也没有键来获取元素的值。

集合的创建:

set_1 = {1,2,3}
set_2 = set([1,2,3])#列表创建集合
set_3 = set((1,2,3))#元组创建集合
print(set_1)
print(set_2)
print(set_3)
print('3个集合是否相同:',set_1 == set_2 == set_3)
{1, 2, 3}
{1, 2, 3}
{1, 2, 3}
3个集合是否相同: True

集合的常用方法:

  1. in:用来判断某个元素是否存在集合中。
set_1 = {1,2,3}
1 in set_1
True    
  1. 过滤重复元素
set_1 = {1,2,3,2,3,1,2}
print(set_1)
{1, 2, 3}
  1. 访问集合的元素。
set_1 = {1,2,3}
for item in set_1:
    print(item)
1
2
3
  1. add:增加集合的值。
set_1 = {1,2,3}
set_1.add(4)
print(set_1)
{1, 2, 3, 4}
  1. remove:删除集合的值。
set_1 = {1,2,3}
set_1.remove(1)
print(set_1)
{2, 3}

字典和集合的排序

字典排序:通常会根据键或值,进行升序或降序排序。

dic_1 = {'b': 1, 'a': 2, 'c': 10}
dic_sorted_by_key = sorted(dic_1.items(), key=lambda x: x[0]) # 根据字典键的升序排序
dic_sorted_by_value = sorted(dic_1.items(), key=lambda x: x[1]) # 根据字典值的升序排序

print(dic_sorted_by_key)
print(dic_sorted_by_value)
[('a', 2), ('b', 1), ('c', 10)]
[('b', 1), ('a', 2), ('c', 10)]

集合排序:

set_1 = {4,1,2,3,5}
set_sorted = sorted(set_1)#对集合的元素进行升序排序
print(set_sorted)
[1, 2, 3, 4, 5]

总之,字典在 Python3.7+ 是有序的数据结构,而集合是无序的,其内部的哈希表存储结构,保证了其查找、插入、删除操作的高效性。所以,字典和集合通常运用在对元素的高效查找、去重等场景。

你可能感兴趣的:(python字典与集合)