📜  Python中的命名元组Namedtuple

📅  最后修改于: 2020-04-15 09:25:28             🧑  作者: Mango

Python支持一种容器类型,例如在模块“ collection “中存在的名为“ namedtuples() “的字典。像字典一样,它们包含散列为特定值的键。但是相反,它既支持从键值访问又支持迭代,这是字典所缺乏的功能。
对namedtuple()的操作:

访问操作

1.按索引访问: namedtuple()的属性值是有序的,可以使用索引号访问,这与无法通过索引访问的字典不同。
2.按键名访问如字典中一样,也允许按键名访问。
3.使用getattr():这是通过提供namedtuple和键值作为参数来访问该值的另一​​种方法

play_arrow
bright_5
# Python代码演示namedtuple()和通过名称,索引和getattr()进行访问
# 导入"collections"
import collections
# 声明namedtuple()
Student = collections.namedtuple('Student',['name','age','DOB'])
# 增值
S = Student('Nandini','19','2541997')
# 使用索引访问
print ("学生年龄使用索引是 : ",end ="")
print (S[1])
# 使用key访问
print ("使用键名的学生姓名为 : ",end ="")
print (S.name)
# 使用getattr()访问
print ("使用getattr()的学生DOB是: ",end ="")
print (getattr(S,'DOB'))

输出:

学生年龄使用索引是 : 19
使用键名的学生姓名为 : Nandini
使用getattr()的学生DOB是 : 2541997
转换

1. _make():此函数用于作为参数传递的iterable中返回namedtuple()
2. _asdict():-该函数返回namedtuple()的映射值构造OrdereDict()。
3. **(双星)运算符:此函数用于将字典转换为namedtuple()。

# Python代码演示namedtuple()和_make(),_ asdict()和“ **"运算符
# 导入"collections" 
import collections
# 声明namedtuple()
Student = collections.namedtuple('Student',['name','age','DOB'])
# 增值
S = Student('Nandini','19','2541997')
# 初始化iterable
li = ['Manjeet', '19', '411997' ]
# 初始化字典dict
di = { 'name' : "Nikhil", 'age' : 19 , 'DOB' : '1391997' }
# 使用_make()返回namedtuple()
print ("使用iterable的namedtuple实例是  : ")
print (Student._make(li))
# 使用_asdict()返回OrderedDict()
print ("使用namedtuple的OrderedDict实例为  : ")
print (S._asdict())
# 使用**运算子从字典返回namedtuple
print ("dict的namedtuple实例是  : ")
print (Student(**di))

输出:

All the fields of students are :
('name', 'age', 'DOB')
The modified namedtuple is :
Student(name='Manjeet', age='19', DOB='2541997')