python 命名元组_Python可命名元组

1、声明namedtuple的方式:

from collections import namedtuple

# 1、字符串加分隔符的形式传入字段名

Teacher = namedtuple("Teacher", "ID,name,phone,age,gender")

# 2、以可迭代对象的形式传入字段名,一般是列表

Student = namedtuple("Student", ["ID", "name", "age"])

2、实例化namedtuple的方式:

# 1、对应位置传入对应的值,或者使用关键字传参

teacher = Teacher(1, "lzh", "13245678901", 32, gender="man")

# 2、使用list或者dict的拆包传参

stu_1, stu_2 = Student(*[1, "张三", 23]), Student(**{"ID": 2, "name": "李四", "age": 24})

# 3、使用namedtuple自带的_make()方法,接收一个可迭代的对象

stu_3, stu_4 = Student._make([3, "王五", 25]), Student._make({"ID": 4, "name": "张六", "age": 26}.values())

3、从namedtuple取值的方式:

teacher = Teacher(1, "lzh", "13245678901", 32, gender="man")

# 1、打印namedtuple实例化的对象

print(teacher) # Teacher(ID=1, name='lzh', phone='13245678901', age=32, gender='man')

# 2、通过索引和key的形式获取值

print(f"teacher中index=0:{teacher[0]}, key=phone:{teacher.phone}") # teacher中index=0:1, key=phone:13245678901

# 3、打印namedtuple对象中的字段名

print(teacher._fields) # ('ID', 'name', 'phone', 'age', 'gender')

4、操作namedtuple对象的方式:

Teacher = namedtuple("Teacher", "ID,name,phone,age,gender")

teacher = Teacher(1, "lzh", "13245678901", 32, gender="man")

# 1、将namedtuple对象转换成字段

print(teacher._asdict()) # {'ID': 1, 'name': 'lzh', 'phone': '13245678901', 'age': 32, 'gender': 'man'}

# 2、修改namedtuple中的值,生成一个新的namedtuple

teacher_1 = teacher._replace(age=56, name="李老师")

print(teacher_1) # Teacher(ID=1, name='李老师', phone='13245678901', age=56, gender='man')

5、遍历namedtuple+结合map()函数的使用:

teacher = Teacher(1, "lzh", "13245678901", 32, gender="man")

# 1、namedtuple本身就是元组,和元组的遍历一致

for value in teacher:

print(value)

# 2、结合map()函数,生成多个namedtuple对象

obj_list = [(1, "lzh", "13245678901", 32, "man"), (2, "carp", "13245678902", 32, "man")]

# 结合_make+map不需要遍历,将多组数据转换成多个namedtuple的可迭代对象

teacher_list = map(teacher._make, obj_list)

for teacher in teacher_list:

print(teacher)

6、结合类使用namedtuple:

class Teacher(namedtuple("Teacher", "ID,name,phone,age,gender")):

""" namedtuple是一种工厂函数,可以类继承的形式给namedtuple添加新功能 """

def as_dict(self):

return self._asdict()

# 可以模拟存储

def save_db(self):

pass

def as_json(self):

""" 转成成json """

return json.dumps(self.as_dict())

@classmethod

def parse_json(cls, json_str):

""" 解析json成为namedtuple """

return cls._make(json.loads(json_str).values())

teacher = Teacher(1, "lzh", "13245678901", 32, "man")

s = '{"ID": 1, "name": "lzh", "phone": "13245678901", "age": 32, "gender": "man"}'

print(Teacher.parse_json(s))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值