美文网首页
from collections import namedtup

from collections import namedtup

作者: 康河水 | 来源:发表于2020-03-27 23:32 被阅读0次
from collections import namedtuple

# 命名元组,使得元组可像列表一样使用key访问(同时可以使用索引访问)
"""
collections.namedtuple 是一个工厂函数,
它可以用来构建一个带字段名的元组和一个有名字的类.

创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。
存放在对应字段里的数据要以一串参数的形式传入到构造函数中(注意,元组的构造函数却只接受单一的可迭代对象)。
命名元组还有一些自己专有的属性。最有用的:类属性_fields、类方法 _make(iterable)和实例方法_asdict()。
"""
# 定义一个命名元祖city,City类,有name/country/population/coordinates四个字段
city = namedtuple('City', 'name country population coordinates')
tokyo = city('Tokyo', 'JP', 36.933, (35.689, 139.69))

# _fields 类属性,返回一个包含这个类所有字段名称的元组
print(city._fields)

# 定义一个命名元祖latLong,LatLong类,有lat/long两个字段
latLong = namedtuple('LatLong', 'lat long')
delhi_data = ('Delhi NCR', 'IN', 21.935, latLong(28.618, 77.208))

# 用 _make() 通过接受一个可迭代对象来生成这个类的一个实例,作用跟City(*delhi_data)相同
delhi = city._make(delhi_data)

# _asdict() 把具名元组以 collections.OrderedDict 的形式返回,可以利用它来把元组里的信息友好地呈现出来。
print(delhi._asdict())


"""
card = namedtuple('Card', ['rank', 'suit'])     # 定义一个命名元祖card,Card类,有rank和suit两个字段


class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()  # 生成一个列表,用空格将字符串分隔成列表

    def __init__(self):
        # 生成一个命名元组组成的列表,将suits、ranks两个列表的元素分别作为命名元组rank、suit的值。
        self._cards = [card(rank, suit) for suit in self.suits for rank in self.ranks]
        print(self._cards)

    # 获取列表的长度
    def __len__(self):
        return len(self._cards)

    # 根据索引取值
    def __getitem__(self, item):
        return self._cards[item]


f = FrenchDeck()
print(f.__len__())
print(f.__getitem__(3))
"""

Person = namedtuple('Person',['age','height','name'])
data2 = [Person(10,1.4,'xiaoming'),Person(12,1.5,'xiaohong')]
data2[0].age
# 10

相关文章

网友评论

      本文标题:from collections import namedtup

      本文链接:https://www.haomeiwen.com/subject/zwsduhtx.html