python的具名元组和sorted函数

 1 import collections
 2 Card = collections.namedtuple('Card', ['rank', 'suit'])
 3 #定义一个具名元组 第一个参数是元组的名字,第二个参数是一个字段名组成的列表
 4 #Card._fields 获取字段名的列表
 5 #Card._make(_data) 实例化一个具名元组 _data一个和fields长度相同的一个元组
 6 #Card._asdict() 获得一个字典字段名 == 值
 7 
 8 class FrenchDeck(object):
 9     ranks = [str(n) for n in range(2, 11)] + list('JQKA') #获取所有牌列表2--A
10     suits = 'spades diamonds clubs hearts'.split()   #获取花色列表
11 
12     def __init__(self):
13         self._cards = [Card(rank, suit) for suit in self.suits
14                        for rank in self.ranks]  #获取组合列表
15 
16     def __len__(self):
17         return len(self._cards)
18 
19     def __getitem__(self, position):
20         return self._cards[position]
21 
22 
23 beer_card = Card('7', 'diamonds') #得到一个花色为diamonds,数值为7的牌
24 print(beer_card)
25 deck = FrenchDeck()
26 print(deck)  #获取52张牌的集合
27 print(deck[0]) #打印第一张牌
28 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
29 def spades_high(card):
30     rank_value = FrenchDeck.ranks.index(card.rank) #获取数值排序
31     return rank_value * len(suit_values) + suit_values[card.suit] #返回数值+花色的排序
32 
33 for card in sorted(deck, key=spades_high): # 对卡牌做排序 然后循环
34     print(card)
35 
36 
37 
38 # sorted方法:
39 sorted(deck,key=spades_high,reverse=True)
40 # deck可迭代对象
41 # reverse参数  排序规则为True是逆序
42 # key一个函数,函数的参数是deck中被迭代的值

 

posted @ 2018-12-11 20:17  盈波秋水泛清涛  阅读(821)  评论(0编辑  收藏  举报