欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Python練習圣典】字典dictionary高級操作

系統 1614 0

1.字典鍵-值對中,值元素的便捷創建增減

主要是利用collections 中的defaultdict

普通復雜過程:

            
              pairs = [('a', 1), ('a', 2),('b', 2)]
d = {}
for key, value in pairs:
    if key not in d:
        d[key] = []
d[key].append(value)
            
          

            
              d = {} #普通字典
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(4)
            
          

當我們使用普通的字典時,還可以dict={},添加元素的只需要dict[element] =value,調用的時候也是如此,dict[element] = xxx,但前提是element在字典里,如果不在字典里就會報錯

利用defaultdict就沒這些問題,且精簡:

defaultdict接受一個工廠函數作為參數,如下來構造:

            
              dict =defaultdict( factory_function)

            
          

這個factory_function可以是list、set、str等,有兩個作用,第一是當key不存在時,返回的是工廠函數的默認值,比如list對應[ ],str對應的是空字符串,set對應set( ),int對應0,第二是可以對值做操作是調用相應類的函數

            
              from collections import defaultdict

d = defaultdict(list)
for key, value in pairs:
    d[key].append(value)

d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)

d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)
            
          

2.創建帶順序的字典

            
              from collections import OrderedDict

d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# 輸出 "foo 1", "bar 2", "spam 3", "grok 4"
for key in d:
    print(key, d[key])
            
          

若后續修改已插入的鍵值,不改變字典的順序。順序字典的內存開銷是比較大的,若數據量很大(比如100,000條以上),則考慮使用其他結構保存數據。

?順序字典的一個應用實例,json串構造:

>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'

?

3.字典排序相關

            
              prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
}
# 通常:
min(prices)  # Returns 'AAPL'
max(prices)  # Returns 'IBM'
min(prices.values())  # Returns 10.75
max(prices.values())  # Returns 612.78

# 高級一點:
min(prices, key=lambda k: prices[k])  # Returns 'FB'
max(prices, key=lambda k: prices[k])  # Returns 'AAPL'
min_value = prices[min(prices, key=lambda k: prices[k])]
sorted(prices, key=lambda k: prices[k])# Returns ['FB', 'HPQ', 'ACME', 'IBM', 'AAPL']

# 以上都要想獲取較全的鍵值信息都比較繁瑣,可轉化成(值,鍵)進行排序
min_price = min(zip(prices.values(), prices.keys()))
# min_price is (10.75, 'FB')
max_price = max(zip(prices.values(), prices.keys()))
# max_price is (612.78, 'AAPL')
prices_sorted = sorted(zip(prices.values(), prices.keys()))
# prices_sorted is [(10.75, 'FB'), (37.2, 'HPQ'),
# (45.23, 'ACME'), (205.55, 'IBM'),
# (612.78, 'AAPL')]
            
          

注意zip生成一個迭代器,只能用一次

另外:也可將字典轉為list:li=list(prices.items()),用【Python練習冊】heapq的應用 的方法來排序

?

4.兩個字典間找異同

dict.keys()和dict.items分別為dict_keys和dict_items對象,具體叫做keys-view和items-view對象,之所以叫view是因為,隨著dict的變化,這些view也自動改變。keys-view和items-view對象支持常規set操作,如求交集、并集、差集等。

            
              a = {
    'x': 1,
    'y': 2,
    'z': 3
}
b = {
    'w': 10,
    'x': 11,
    'y': 2
}
# 找相同鍵
a.keys() & b.keys()  # { 'x', 'y' }
# 找在a中不在b中的鍵
a.keys() - b.keys()  # { 'z' }
# 找相同元素
a.items() & b.items()  # { ('y', 2) }

# 移除特定鍵構建新字典
c = {key: a[key] for key in a.keys() - {'z', 'w'}}
# c is {'x': 1, 'y': 2}
            
          

注意:dict.values是values-view對象,但不支持常規set操作,因為value值可以不唯一

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色九月 | 99久久国产综合精品网成人影院 | 色版网站 | 曰韩在线视频 | 国产精品吹潮在线观看中文 | 久久精品一 | 日韩欧美精品 | 国产成人av免费看 | 免费啪视频在线观看免费的 | 欧美性生活久久 | 亚洲精品福利你懂 | 亚洲涩综合 | 欧美久久网 | 久久9966e这里只有精品 | 男女视频在线观看免费 | 黄色免费视频观看 | 五月久久亚洲七七综合中文网 | 久久综合丁香激情久久 | 日韩国产在线 | www午夜视频 | 挑战者联盟第一季免费观看完整版 | 国产视频一 | 五月婷婷在线观看视频 | 亚洲伊人网站 | 手机在线看片国产日韩生活片 | 久久三区| 成人免费一区二区三区视频网站 | 九九精品视频在线 | 欧洲a老妇女黄大片 | 五月婷在线 | 在线二区人妖系列 | 狠狠做深爱婷婷久久一区 | 亚洲性69影院在线观看 | 日韩免费视频 | 在线天堂中文在线资源网 | 日韩三级中文字幕 | 欧美成人三区 | 久久99国产综合精品 | 亚洲一区二区三区高清网 | 色婷婷基地 | 日本黄色中文字幕 |