数据类型内置方法(下)——字典、元组、集合

五、字典内置方法

1.类型转换    dict()

        字典的转换比较麻烦,一般不使用关键字,而是自己转。

 

2. 取值

(1)按k取值(不推荐使用)

    * key要放在中括号里[key],k不存在直接报错

user_dict = {
'name': 'Alex',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print(user_dict['name'])    # Alex

print(user_dict['phone'])   # k不存在会直接报错

(2)按内置方法get取值(推荐使用)

   * key放在小括号里,key不存在显示None


print(user_dict.get('name'))    # Alex
print(user_dict.get('name'))   # None k不存在显示None

补充:两个参数的情况下,按前面的参数取值,前面的参数不存在则显示None。最多只能有两个参数,不然报错。

print(user_dict.get('name','age'))   # Alex   两个参数同时存在,按前面的取值

print(user_dict.get('age','name'))   # 18     两个参数同时存在,按前面的取值 

print(user_dict.get('name','job')) # Alex 一个参数存在一个键不存在,按前面的取值

print(user_dict.get('job','name')) # None 两个参数,前面的不存在,显示None

 

3. 修改值数据

user_dict = {
'name': 'Alex',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print(id(user_dict))    # 2720408952960
print(user_dict)      # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball']}

user_dict['name'] = 'Tony'
print(id(user_dict))    # 2720408952960   # id 没有发生变化
print(user_dict)     #{'name': 'Tony', 'age': 18, 'hobbies': ['play game', 'basketball']}   如果key原先存在于字典,则会修改对应value的值


user_dict['job'] = 'Teacher'
print(id(user_dict))    # 2720408952960    # id没有发生变化
print(user_dict)      # {'name': 'Tony', 'age': 18, 'hobbies': ['play game', 'basketball'], 'job': 'Teacher'}   如果key原先不存在于字典,则会新增key:value

 

4. 删除数据 

user_dict = {
'name': 'Alex',
'age': 18,
'hobbies': ['play game', 'basketball']
}

方法1:

del user_dict['name']
print(user_dict)    # {'age': 18, 'hobbies': ['play game', 'basketball']} 通过指定字典的key来删除字典的键值对

方法2:

user_dict.pop('name')
print(user_dict)     # {'age': 18, 'hobbies': ['play game', 'basketball']}   通过指定字典的key来删除字典的键值对

 

5. 统计字典中键值对的个数

print(len(user_dict))    # 3

 

6. 获取字典的键keys(),值values(),键值对items()

print(user_dict.keys())    # dict_keys(['name', 'age', 'hobbies'])

print(user_dict.values())    # dict_values(['Alex', 18, ['play game', 'basketball']])

print(user_dict.items())    # dict_items([('name', 'Alex'), ('age', 18), ('hobbies', ['play game', 'basketball'])])

通过循环取值

for i in user_dict.items():
    k, v = i
    print(k, v)    


"""
name Alex
age 18
hobbies ['play game', 'basketball']
"""

 

7. 其他(很少用到)

fromkeys()

快速生成值相同的字典

方法1:

print(dict.fromkeys(['k1', 'k2', 'k3'], 123))    # {'k1': 123, 'k2': 123, 'k3': 123}   三个键生成相同的值

方法2:

res = dict.fromkeys(['k1', 'k2', 'k3'], 123)
print(res)    # {'k1': 123, 'k2': 123, 'k3': 123}

 

append()

当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有 

res = dict.fromkeys(['k1', 'k2', 'k3'], [])

res['k1'].append('jason')  
print(res)   # {'k1': ['jason'], 'k2': ['jason'], 'k3': ['jason']}  每一个健对应的值都会修改

res['k2'].append(123)  
print(res)    # {'k1': [123], 'k2': [123], 'k3': [123]}  每一个健对应的值都会修改

res['k3'].append('study')
print(res)    # {'k1': ['study'], 'k2': ['study'], 'k3': ['study']}  每一个健对应的值都会修改

 

setdefault()

res = user_dict.setdefault('name','tony')
print(user_dict, res)    # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball']} Alex    键存在则不修改,结果是键对应的值


res = user_dict.setdefault('job','teacher')
print(user_dict, res)    # {'name': 'Alex', 'age': 18, 'hobbies': ['play game', 'basketball'], 'job': 'teacher'} teacher  不存在则新增键值对,结果是新增的值

 

六、元组内置方法

    元组与列表类似,也是可以存多个任意类型的元素,不同之处在于元组的元素不能修改,即元组相当于不可变的列表,用于记录多个固定不允许修改的值,单纯用于取。

 1. 类型转换

   tuple()

  支持for循环的数据类型都可以转成元组   

 

2.索引取值

    (正向取+反向取):只能取,不能改否则报错!

 

3.切片操作

    (顾头不顾尾,步长)

 

4.统计元组内数据值的个数

         len(t1)     

5. 统计元组内某个数据值出现的次数 

      t1.count(数据值))

6. 统计元组内指定数据值的索引值 

       print(t1.index(索引值))

补充说明:

  • 元组内如果只有一个数据值那么逗号不能少
  • 元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
  • 元组不能新增或删除数据

 

七、集合内置方法

1.类型转换

      set()

  •  集合内数据必须是不可变类型(整型,浮点型,字符串,元组)
  •  集合内数据是无序的,没有索引的概念

2.集合需要掌握的方法

    去重

(集合的去重无法保留原先数据的排列顺序)

l1 = [11, 22, 33, 22, 11, 22, 33, 22, 11, 22, 33, 22]
s1 = set(l1)
l1 = list(s1)
print(l1)    # [33, 11, 22]

    关系运算

例: 两个微信账户之间 有不同的好友 有相同的好友
       f1 = {'jason', 'tony', 'jerry', 'oscar'}           # 用户1的好友列表
       f2 = {'jack', 'jason', 'tom', 'tony'}               # 用户2的好友列表
1.求两个人的共同好友

print(f1 & f2)    # {'tony', 'jason'}

2. 求用户1独有的好友

print(f1 - f2)     # {'oscar', 'jerry'}

3. 求两个人所有的好友

print(f1 | f2)    # {'jerry', 'tony', 'oscar', 'jack', 'tom', 'jason'}

4. 求两个人各自独有的好友

print(f1 ^ f2)    # {'oscar', 'tom', 'jerry', 'jack'}

5. 父集、子集

print(f1 > f2)     # False
 
print(f1 < f2)     # False

 

posted @ 2022-09-30 17:24  莫~慌  阅读(501)  评论(0编辑  收藏  举报