python from collections import_from collections import namedtuple

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值