Pycharm——4 元组和 5 字典

7 列表转换成字典

7.1 zip()合并类表

a = ['a1', 'a2', 'a3', 'a4']
b = ['b1', 'b2', 'b3']
c = ['c1', 'c2', 'c3', 'c4', 'c5']

d = zip(a, b)
e = zip(a, c)

print(dict(d))
print(dict(e))

两个列表的长度不一致时,多出的元素在另一个列表无匹配的元素时就不展示多出的元素

{'a1': 'b1', 'a2': 'b2', 'a3': 'b3'}
{'a1': 'c1', 'a2': 'c2', 'a3': 'c3', 'a4': 'c4'}

7.2 使用嵌套列表转换为字典

a = ['a1', 'a2']
b = ['b1', 'b2']
c = [a, b]

print('a+b:', a+b)
print('c列表:', c)
# print(dict( c )) # {'a1': 'a2', 'b1': 'b2'}
# 相当于遍历子列表,如下
dit = {}
for i in c:
    dit[i[0]] = i[1]

    # print(i[0])
    # print(i[1])

print('字典:', dit)

a+b: ['a1', 'a2', 'b1', 'b2']
c列表: [['a1', 'a2'], ['b1', 'b2']]
字典: {'a1': 'a2', 'b1': 'b2'}

7.3 eval() 把list,tuple,dict和string相互转化

eval()函数传进去的参数必须是字符串或者是对象

a = "[1,2], [3,4], [5,6], [7,8], [9,0]"

b = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

c = "{1: 'a', 2: 'b'}"

# 字符串转换为元组
print(eval(a), type(eval(a)))
# 字符串转换为列表
print(eval(b), type(eval(b)))
# 字符串转换为字典
print(eval(c), type(eval(c)))
([1, 2], [3, 4], [5, 6], [7, 8], [9, 0]) <class 'tuple'>
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]] <class 'list'>
{1: 'a', 2: 'b'} <class 'dict'>

6 enumerate()

6.1 enumerate获取index和value

# 使用enumerate()遍历容器类型,既要下标又要数据

# 1.列表
name_list = ['和平', '友爱', '善良']
# 1 遍历字典中的每个key。
# 2 利用拆包,使用不同变量来保存元组中的每一个数据
for index, value in enumerate(name_list):
    num = index + 1
    print(index, value, '当前是第%d项数据' % num)
# 2. 字符串
my_str = 'abcsdkamk'
for index, value in enumerate(my_str):
    num = index + 1
    print(index, value, '当前是第%d项数据' % num)
# 3. 字典
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
for index, value in enumerate(person_dict):
    num = index + 1
    print(index, value, '当前是第%d项数据' % num)

结果

0 和平 当前是第1项数据
1 友爱 当前是第2项数据
2 善良 当前是第3项数据
0 a 当前是第1项数据
1 b 当前是第2项数据
2 c 当前是第3项数据
3 s 当前是第4项数据
4 d 当前是第5项数据
5 k 当前是第6项数据
6 a 当前是第7项数据
7 m 当前是第8项数据
8 k 当前是第9项数据
0 name 当前是第1项数据
1 sex 当前是第2项数据
2 age 当前是第3项数据

6.2 enumerate优化教师办公室分配

import random
office_list = [[], [], []]
teacher_list = ['牛老师', '张老师', '花老师', '朱老师', '何老师', '刘妍']
while True:
    for teacher in teacher_list:
    # 随机产生办公室下标
        index = random.randint(0, 2)
    # 根据办公室下标,获取到指定的某个办公室,为该办公室添加对应的老师
        current_office = office_list[index]
        current_office.append(teacher)
         # office_list[index].append(teacher)
# 解决列表为空的问题
    if len(office_list[0]) ==0 or len(office_list[1]) ==0 or len(office_list[2]) ==0:
        # 把office_list重新置空
        office_list = [[], [], []]
        continue
    else:
        break
print(office_list)
# 遍历办公室列表,获取每一个办公室
# 使用enumerate获取下标后+1得到办公室编号
for index, office in enumerate(office_list):
    count = index + 1
    # print(office)
    # 获取每个办公室的人数
    num = len(office)
    print('第%d办公室人数为%d人:' % (count, num))
    # 遍历小列表office获取每一位老师
    for teacher in office:
        print(teacher)
    count += 1

5 字典

5.4 字典遍历

5.4.1 遍历key
5.4.2 遍历value
5.4.3 遍历key & value
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
# 1 遍历字典中的每个key
for key in person_dict.keys():
# # 默认遍历key
# for key in person_dict():
    print(key,person_dict[key])
print('==============')
# 2 遍历字典中的每个value
for value in  person_dict.values():
    print(value)
print('==============')
# 3 遍历字典中的每个item
for item in person_dict.items():
    print(item)
print('==============')
# 4 遍历字典中的每个key和value
for item in person_dict.items():
    key = item[0]
    value = item[1]
    print(key, value)
print('==============')
for key, value in person_dict.items():
    print(key, value)

5.3 字典操作

5.3.1 len()获取键值对的个数
5.3.2 keys ()获取字典中的所有key
5.3.3 values ()获取字典中的所有value
5.3.4 items()获取字典中的所有item
person_dict = {'name': '1', 'sex': 'male', 'age': 18}

result = len(person_dict)

keys = person_dict.keys()

value = person_dict.values()

items = person_dict.items()
print(result)
print(keys)
print(value)
print(items)

结果

3
dict_keys(['name', 'sex', 'age'])
dict_values(['1', 'male', 18])
# 字典里面的每项数据是一个元组
# 元组里面的第一个值是key,第二个值是value
dict_items([('name', '1'), ('sex', 'male'), ('age', 18)])

5.2 字典操作

5.2.1 增加 赋值、setdefault
  1. 利用赋值给字典增加元素,若无新key,则修改指定key的值。
  2. setdefault
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
# 新增键值对
person_dict.setdefault('hair', 10)
print(person_dict)

# 新增key,未提供value。如果不提供值,默认值是none
person_dict.setdefault('hand')
print(person_dict)
{'name': '1', 'sex': 'male', 'age': 18, 'hair': 10}
{'name': '1', 'sex': 'male', 'age': 18, 'hair': 10, 'hand': None}
5.2.2 删除 del、pop、popitem
5.2.3 修改 赋值、update
5.2.4 更新
# 字典更新,合并后使用最新数据,看sex。
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
my_dict = {'户籍': '武汉', '爱好': '美色', 'sex': 'Fmale'}
person_dict.update(my_dict)
print(person_dict)

person_dict = {'name': '1', 'sex': 'male', 'age': 18}
my_dict = {'name': '5', 'sex': 'fmale', 'age': 18}

person_dict.update(my_dict)
print(person_dict)

person_dict = {'name': '1', 'sex': 'male', 'age': 18}
# print(person_dict, type(person_dict))
# 添加数据
person_dict['address'] = '江南'
print(person_dict)
# 如果key在字典中存在,以下操作可修改键值对
person_dict['age'] = 28
print(person_dict)

# 删除数据
del person_dict['age']
print(person_dict)
# 扩展:pop方法根据key删除字典中的键值对,并返回value值
value = person_dict.pop('sex')
print(value)
print(person_dict)

# 字典更新,合并后使用最新数据,看sex。
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
my_dict = {'户籍': '武汉', '爱好': '美色', 'sex': 'Fmale'}
person_dict.update(my_dict)
print(person_dict)

# 清除字典中的所有数据
my_dict = {'户籍': '武汉', '爱好': '美色', 'sex': 'Fmale'}
my_dict.clear()
print(my_dict)

结果

{'name': '1', 'sex': 'male', 'age': 18, 'address': '江南'}
{'name': '1', 'sex': 'male', 'age': 28, 'address': '江南'}
{'name': '1', 'sex': 'male', 'address': '江南'}
male
{'name': '1', 'address': '江南'}
{'name': '1', 'sex': 'Fmale', 'age': 18, '户籍': '武汉', '爱好': '美色'}
{}

5.1 字典的介绍

字典属于一个容器类型,可以存储多个数据(键值对),表现形式:{key:value,…}

  1. 字典和列表一样,可以存储多个数据
  2. 列表中找某个元素时,根据下标进行
  3. 字典中找某个元素时,是根据 ‘名字’
  4. 字典的每个元素由两部分组成,key:value。
# 字典的使用场景
# 字典可根据key能快速检索到某个value值,取值操作比列表取值操作的可读性更高
person_dict = {'name': '1', 'sex': 'male', 'age': 18}
print(person_dict, type(person_dict))
# 取值1,使用中括号方式取值,需要保证key在字典中存在,否则崩溃。
value = person_dict['name']
print(value)

# 取值2,使用get取值,若key不存在,返回None
age = person_dict.get('age')
print(age)
age = person_dict.get('ag')
print(age)

# get可设置默认值,若字典中不存在value,则使用默认值。若字典中存在对应的value,则使用字典数据。
tel = person_dict.get('tel', '123456')
print(tel)

person_dict = {'name': '1', 'sex': 'male', 'age': 18, 'tel': '234956'}
tel = person_dict.get('tel', '123456')
print(tel)

结果

{'name': '1', 'sex': 'male', 'age': 18} <class 'dict'>
1
18
None
123456
234956

4 元组

4.3 元组结合(index/count)

4.3.1 count 统计指定元素的个数

根据指定数据在元组中统计该数据出现的次数

4.3.2 index 返回指定元素的下标

根据指定数据在元组查找该数据所对应的下标

my_tuple = (1, 3.14, 'abc,,', [1, 4])
# count,
result = my_tuple.count(3.14)
print(result)
# 返回1
result = my_tuple.count(3)
print(result)
# 返回0

# index
result = my_tuple.index(3.14)
print(result)
# 返回1
result = my_tuple.index(3)
print(result)
# 报错
4.3.3 统计元组所有元素的累计和
nums = (1,5,7,5,0,3,5)
print(nums.count(5))

# 统计所有元素的累计和
sum1 = 0
for value in nums:
    sum1 += value
print('元组的和为:%d' % sum1)
4.3.4 sum函数直接求和
nums = (1,5,7,5,0,3,5)

print(sum(nums))

4.2 元组遍历(for/while)

my_tuple = (1, 3.14, 'abc,,', [1, 4])
# 1. for遍历元组
for value in my_tuple:
    print(value)

# 2. while遍历元组
#记录当前的下标
print('==============')
index = 0
while index < len(my_tuple):
    # 根据下标获取对应的数据
    data= my_tuple[index]
    print(data)
    index += 1

4.1 元组

属于容器类型,可以存多个数据,但是不能根据下标直接修改。
使用:

  1. 字符串的格式化输出。
  2. 函数的返回值,元组可以返回多个数据。
    总结:元组类似一个只读列表,只能获取数据,不能对元组进行修改。
my_tuple = (1,3.14,'abc,,',[1,4])
print(my_tuple,type(my_tuple))
# 根据下标或者切片获取元组的数据
value = my_tuple[2]
print(value)

result = my_tuple[:3]
print(result)

# 如果元组只有一个数据,逗号不能省略
name_tuple = (1,)
print(name_tuple, type(name_tuple))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值