1. 程式人生 > >Python其他數據結構collection模塊-namtuple defaultdict deque Queue Counter OrderDict

Python其他數據結構collection模塊-namtuple defaultdict deque Queue Counter OrderDict

是個 microsoft 隊列 ber IV 特性 默認值 deque pre

nametuple

  是tuple擴展子類,命名元組,其實本質上簡單類對象

from collections import namedtuple


info = namedtuple("Info", [‘name‘, ‘age‘, ‘height‘])
# 賦值,是不是有點像面向對象中實例變量方式
info.name = "北門吹雪"
info.age = 18
info.height = 175

# 訪問
print(info.name)

  其實本質上和下面方式一樣

class Info:
    def __init__(self):
        self.name = None
        self.age = None
        self.height = None
        pass


info = Info()
# 賦值
info.name = "北門吹雪"
info.age = 18
info.height = 175
# 訪問
print(info.name)

  相關方法

    1. _make 初始化賦值, 必須長度一致

from collections import namedtuple


info = namedtuple("Info", [‘name‘, ‘age‘, ‘height‘])._make(["北門吹雪", 18, 175])

# 訪問
print(info.name)

    2. _asdict  將nametuple對象轉換為字典對象,是個有序字典

from collections import namedtuple


info = namedtuple("Info", [‘name‘, ‘age‘, ‘height‘])._make(["北門吹雪", 18, 175])

# 訪問
print(info._asdict())

  

  

defaultdict

  是dict的擴展類,訪問字典的key如果沒有則自動設置默認值,並添加進字典

info = dict()
name = info.setdefault(‘name‘, "北門吹雪")
print(name, info)


from collections import defaultdict
# 默認值必須是可叠代對象
info = defaultdict(lambda: "北門吹雪")
name = info[‘name‘]
print(name, info)

  

deque  

  雙端隊列, 操作和list類似

  list deque 推薦用來保存相同類似數據

,相關方法和list一致

  特性: deque是線程安全的,list不是線程安全,多線程編程則使用deque

from collections import deque
names = deque()
names.append("北門吹雪")
names.append("QiNiuYun")
names.insert(0, "今日頭條")
print(names)

  

Queue    

  隊列(先進先出),通過 deque實現

  核心兩個方法 put get,會堵塞

from queue import Queue


message = Queue()
# 放入數據
message.put("北門吹雪")
# 消費數據
print(message.get())

  

Counter  

  對可叠代對象做統計出現個數,直接返回統計結果,是dict的子類

from collections import Counter
from random import randint


numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)

  相關方法

    1. update        添加新的數據

from collections import Counter
from random import randint


numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)
# 添加新的數據
numbers_count.update([randint(1, 10) for _ in range(20)])
print(numbers_count)

    2. most_common(N)   輸出出現次數當前最多的前N個元素

from collections import Counter
from random import randint


numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)
# 添加新的數據
numbers_count.update([randint(1, 10) for _ in range(20)])
print(numbers_count)

# 輸出出現次數當前最多的前3個元素,返回列表
print(numbers_count.most_common(3))

  

OrderDict

  繼承dict, 保持字典添加順序,具有dict所有方法

from collections import OrderedDict


info = OrderedDict()
# 填入數據
info["name"] = "北門吹雪"
info[‘age‘] = 18
info[‘height‘] = 175
print(info)

  其他方法

    1. popitem    默認刪除最後的key:value,並返回

from collections import OrderedDict


info = OrderedDict()
# 填入數據
info["name"] = "北門吹雪"
info[‘age‘] = 18
info[‘height‘] = 175
# 返回元組形式
print(info.popitem(‘name‘))

    2. pop      必須傳入key,刪除key:value,返回value

from collections import OrderedDict


info = OrderedDict()
# 填入數據
info["name"] = "北門吹雪"
info[‘age‘] = 18
info[‘height‘] = 175

# 返回age對應的值
print(info.pop(‘age‘))

    3. move_to_end  傳入key,將元素移到最後

from collections import OrderedDict


info = OrderedDict()
# 填入數據
info["name"] = "北門吹雪"
info[‘age‘] = 18
info[‘height‘] = 175

# 移動數據
info.move_to_end(‘age‘)
print(info)

  

經驗:

  1. 這些數據類型基礎還是從list tuple set dict基本數據類型擴展而來,本質上添加了一些特性

Python其他數據結構collection模塊-namtuple defaultdict deque Queue Counter OrderDict