python字典与集合

2019-07-30  本文已影响0人  举颗凤梨

字典

1.什么是字典

1)

字典是容器型数据类型(序列),将{}作为容器的标志,里面的元素用逗号隔开
特点:可变(支持增删改),无序(不支持下标操作)

2)字典中的元素

2.查 - 获取字典的值

1)获取单个元素的值

字典[key] - 获取字典中指定key对应的值;如果key不存在,会报错
字典.get(key)/字典.get(key,默认值) - 获取字典中指定的key对应的值;如果key不存在,返回None或者默认值

2)遍历

for key in 字典: 拿到的是字典中所有的key
for value in 字典.values: #拿到的是字典中所有的value
for key,value in 字典.itmes(): #拿到的是字典中所有的键和值

练习

# 1)获取单个元素
dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
print(dog['name'],dog['color'])
print(dog.get('weight', '没有该值'))  # 没有返回默认值
# 2)遍历
# 常用的遍历方式,最好用这种
for x in dog:
    print(x)     # 拿到字典中所有的key
# 不建议使用
for value in dog.values():
    print(value)    # 拿到字典中所有的值value
# 不建议使用
for key,value in dog.items():
    print(key,value)

3.增/改

dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
dog['weight'] = 34
print(dog)
dog['weight'] = 43
print(dog)

4.删 - 删除key对应的值

"""

  1. del 字典[key] - 删除指定key对应的键值对
  2. 字典.pop(key) - 取出指定key对应的值,但取出后,原字典中key对应的键值对也没有了
dog = {'name': '哈尼', 'age': 3, 'type': '金毛', 'color': '金色'}
del dog['color']
print(dog)   # {'name': '哈尼', 'age': 3, 'type': '金毛'}
type1 = dog.pop('type')
print(dog,type1)    # {'name': '哈尼', 'age': 3} 金毛

5.相关运算

print({'name': '哈尼', 'age': 3} == {'name': '哈尼', 'age': 3})  # True
print({'age': 3, 'name': '哈尼'} == {'name': '哈尼', 'age': 3})  # True

6.相关操作: in / not in; max,min,sum,len

print(2 in {'a': 1, 'b': 2})  # False
print('a' in {'a': 1, 'b': 2})  # True

dict1 = {'a': 1, 'z': 2, 'c': 3}
print(max(dict1))  # z 求key的最大值

dict2 = {1: 'a', 2: 'z', 3: 'c'}
print(sum(dict2))  # 6
print(max(dict2))  # 3
print(min(dict2))  # 1
print(len(dict2))  # 3
print(list(dict2))  # [1, 2, 3]
print(dict([[1, 2], [2, 3], [3, 4]]))  # {1: 2, 2: 3, 3: 4}

7.相关方法

  1. 字典.clear() - 清空字典
  2. dict.fromkeys(序列,值=None) - 创建一个新的字典,将序列中的元素作为字典的key,将值作为每一个key对应的值
  3. 字典.item() - 将字典转中的键值对转换成元祖作为容器中的元祖
  4. 字典.values(),字典.keys() - 将值或者键全部取出来
  5. 字典.setdefault(key,value=None) - 在字典中添加键值对(key存在的时候不会有修改的作用)
  6. 字典1.update(字典2) - 将字典2中的键值对全部添加到字典1中

练习

# 2) dict.fromkeys(序列,值=None)  -  创建一个新的字典,将序列中的元素作为字典的key,将值作为每一个key对应的值
print(dict.fromkeys((1, 2, 3, 4), 0))  # {1: 0, 2: 0, 3: 0, 4: 0}
print(dict.fromkeys((1, 2, 3, 4)))  # {1: None, 2: None, 3: None, 4: None}
# 4) 字典.values(),字典.keys()   -   将值或者键全部取出来
dict2 = {1: 'a', 2: 'z', 3: 'c'}
print(dict2.values())   # dict_values(['a', 'z', 'c'])
print(dict2.keys())    # dict_keys([1, 2, 3])
# 5) 字典.setdefault(key,value=None)   -   在字典中添加键值对(key存在的时候不会有修改的作用)
dict2 = {1: 'a', 2: 'z', 3: 'c'}
dict2.setdefault(1, 'e')
dict2.setdefault(4, 'f')
print(dict2)  # {1: 'a', 2: 'z', 3: 'c', 4: 'f'}
# 6) 字典1.update(字典2)   -   将字典2中的键值对全部添加到字典1中
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'x': 100, 'y': 200, 'a': 123}
dict1.update(dict2)
print(dict1)  # {'a': 123, 'b': 2, 'c': 3, 'x': 100, 'y': 200}
dict2.update([[2, 3], [3, 4]])  # 不一定是字典,可以转化为字典的序列也可以
print(dict2)  # { 'x': 100, 'y': 200, 'a': 123, 2: 3, 3: 4}

练习:用一个列表保存5只狗的信息,每只狗有:名字、年龄、颜色和体重 1)求5只狗的平均年龄 2)找到5只狗体重最大的狗的名字

dogs = [{'name': '哈尼', 'age': 3, 'color': '金色', 'weight': 13},
        {'name': 'lulu', 'age': 1, 'color': '棕色', 'weight': 8},
        {'name': 'TT', 'age': 1.5, 'color': '白色', 'weight': 7},
        {'name': '会长', 'age': 2, 'color': '棕色', 'weight': 13},
        {'name': 'lala', 'age': 2, 'color': '白色', 'weight': 6}]
ages = 0
weights = []
for dog in dogs:
    ages += dog['age']
    weights.append(dog['weight'])
print(weights.count(max(weights)))
print(weights.index(max(weights),weights.index(max(weights))+1,len(weights)))
print(ages/5, dogs[weights.index(max(weights))]['name'])

集合

1.什么是集合(set)

练习

# 1.空集合
set1 =set()
print(type(set1))
set2 = {12,'abs',(1,2)}
print(set2)
# set3 = {'abs',[1,2]}     # TypeError: unhashable type: 'list'
# set4 = {{'a':'b'},True}   # TypeError: unhashable type: 'dict'
# 集合自带去重功能(集合元素的唯一性)
scores = [65,23,34,45,54,23,45,65]
scores = list(set(scores))
print(scores)

2.集合元素的增删改查

1)查 - 只支持遍历,不能单独获取具体某一个元素

names = {'小明', '小米', '张三', '殷夫人'}
for item in names: # for in的遍历都是通过转化为列表,根据下标进行遍历
print(item)

2) 增:

3) 删除 - 删除元素

4) 改(集合不支持修改元素的操作)

2.数学的集合运算:

set1 = {1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 4, 7, 9, 10}

1)求交集:集合1 & 集合2

print(set1 & set2) # {1, 2, 3, 4}

2)求并集:集合1 | 集合2

print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 9, 10}

3)求差集:集合1 - 集合2 获取集合1中除了集合2中的元素剩下的部分

print(set1-set2) # {5, 6}
print(set2-set1) # {9, 10, 7}

4) 求对称差集: 集合1 ^ 集合2 获取两个集合除了公共部分剩下的部分

print(set1 ^ set2) # {5, 6, 7, 9, 10}

5) 集合1 > 集合2 判断集合1中是否包含集合2

print({9, 10, 11, 12} > {1, 2, 3}) # False
print({9, 10, 11, 12} > {9,10}) # True

6) 集合1 < 集合2 判断集合2中是否包含集合1

print({9, 10, 11, 12} < {9,10}) # False
print({9, 10, 11, 12} < {9,10,11,12,13,14}) # True

上一篇 下一篇

猜你喜欢

热点阅读