posts - 13,  comments - 3,  trackbacks - 0

          映射類型
              定義:鍵值對,鍵不能重復,值可以重復。Python中的映射類型是字典(dict)
              映射的創建
                  1. 字面值創建
                      eg. d = {'a' : 100, 'b':200 }
                  2. 工廠函數dict()創建
                      eg1. d = dict([['x', 1], ['y':2]])
                      eg2. d = dict(x=1, y=2)
                      eg3. d = dict( zip(('x', 'y'), (1,2)) )
                  3. 其他函數
                      d = dict.fromkeys( (1,2,3), 'value' ) #創建一個dict,鍵為1,2,3,值為value
              映射的使用
                  1. 鍵值讀寫
                      []操作符:
                          可以用來獲得值或者設置/新建值
                          在讀取的時候,如果鍵不存在,則拋出一個錯誤
                          eg.
                              a = {'x':1, 'y':2}
                              a['z'] = 3         #鍵不存在,則創建鍵值對
                              a['x'] = '6'    #鍵存在,則更新值
                              a['y']            #獲得鍵對應的值
                              #! a['p']        沒有對應的鍵會拋出Error!
                      get(key, default=None)
                          用來獲取值時,如果鍵不存在也不會拋出錯誤,會返回default值
                      NOTE: 沒有set方法
                  2. 遍歷:
                      keys --> 鍵遍歷
                      values --> 值遍歷
                      items --> 鍵值遍歷
                      利用sorted(dict) --> 有序的鍵遍歷(對鍵排序)
                      eg. TestTraversal.py
                  3. 常用操作
                      刪除
                          del a['x']    #刪除鍵為'x'的條目
                          a.clear        #清除字典
                          a.pop('x')    #刪除鍵為'x'的條目并返回其值
                          a.popitem()    #彈出一個(k,v)對并返回。如果a為空則報錯
                      判斷
                          k in/not in dict
                  4. 常用函數表
                      方法名字                操作
                      dict.clear()        刪除字典中所有元素
                      dict.copy()            返回字典(淺復制)的一個副本
                      dict.fromkeysc(seq,
                      val=None)            創建并返回一個新字典,以seq 中的元素做該字典的鍵,val 做該字典
                                          中所有鍵對應的初始值(如果不提供此值,則默認為None)
                      dict.get(key,
                      default=None)        對字典dict 中的鍵key,返回它對應的值value,如果字典中不存在此
                                          鍵,則返回default 的值(注意,參數default 的默認值為None)
                      dict.has_key(key)    如果鍵(key)在字典中存在,返回True,否則返回False.
                                          在Python2.2版本引入in 和not in 后,此方法幾乎已廢棄不用了,但
                                          仍提供一個可工作的接口。
                      dict.items()        返回一個包含字典中(鍵, 值)對元組的列表
                      dict.keys()            返回一個包含字典中鍵的列表
                      dict.iter()            方法iteritems(), iterkeys(), itervalues()與它們對應的非迭代方法
                                          一樣,不同的是它們返回一個迭代子,而不是一個列表。
                      dict.pop(key
                      [, default])        和方法get()相似,如果字典中key 鍵存在,刪除并返回dict[key],如果
                                          key 鍵不存在,且沒有給出default 的值,引發KeyError 異常。
                      dict.setdefault(key,
                      default=None)        和方法set()相似,如果字典中不存在key 鍵,由dict[key]=default為它賦值。
                      dict.update(dict2)    將字典dict2 的鍵-值對添加到字典dict
                      dict.values()        返回一個包含字典中所有值的列表
              映射的鍵
                  什么可以做為映射的鍵? --> 可hash的
                  什么可hash?
                      1. 不可變對象 (數字,字符串。。。)
                      2. 僅包含不可變對象的不可變容器(僅包含不可變對象的元組)
                      3. 實現了__hash__()方法的類(可能是可變對象)

          集合類型(Set)
              特點:無順序,不能重復
              分類:可修改的集合和不可修改的集合
              創建:
                  >>> s = set('cheeseshop')
                  >>> s
                  set(['c', 'e', 'h', 'o', 'p', 's'])
                  >>> t = frozenset('bookshop')
                  >>> t
                  frozenset(['b', 'h', 'k', 'o', 'p', 's'])
              使用:
                  >>> 'k' in s
                  False
                  >>> 'k' in t
                  True
                  >>> 'c' not in t
                  True
                  >>> for i in s:
                  ... print i
              操作
                  函數/方法名                    等價運算符                說明
              所有集合類型
                  len(s)                                            集合基數: 集合s 中元素的個數
                  set([obj])                                         可變集合工廠函數; obj 必須是支持迭代的,由obj 中
                                                                  的元素創建集合,否則創建一個空集合
                  frozenset([obj])                                不可變集合工廠函數; 執行方式和set()方法相同,但它
                                                                  返回的是不可變集合
                                              obj in s             成員測試:obj 是s 中的一個元素嗎?
                                              obj not in s         非成員測試:obj 不是s 中的一個元素嗎?
                                              s == t                 等價測試: 測試s 和t 是否具有相同的元素?
                                              s != t                 不等價測試: 與==相反
                                              s < t                 (嚴格意義上)子集測試; s != t 而且s 中 所 有的元素都是t 的成員
                  s.issubset(t)                 s <= t                 子集測試(允許不嚴格意義上的子集): s 中所有的元素    都是t 的成員
                                              s > t                 (嚴格意義上)超集測試: s != t 而且t 中所有的元素都是s 的成員
                  s.issuperset(t)             s >= t                 超集測試(允許不嚴格意義上的超集): t 中所有的元素    都是s 的成員
                  s.union(t)                     s | t                 合并操作:s 或t 中的元素
                  s.intersection(t)             s & t                 交集操作:s 和t 中的元素
                  s.difference(t)             s - t                 差分操作: s 中的元素,而不是t 中的元素
                  s.symmetric_difference(t)    s ^ t                 對稱差分操作:s 或t 中的元素,但不是s 和t 共有的元素
                  s.copy()                                         復制操作:返回s 的(淺復制)副本
              僅用于可變集合
                  s.update(t)                 s |= t (Union)         修改操作: 將t 中的成員添加s
                  s.intersection_update(t)     s &= t                 交集修改操作: s 中僅包括s 和t 中共有的成員
                  s.difference_update(t)         s -= t                 差修改操作: s 中包括僅屬于s 但不屬于t 的成員
                  s.symmetric_
                  difference_
                  update(t)                     s ^= t                 對稱差分修改操作: s 中包括僅屬于s 或僅屬于t 的成員
                  s.add(obj)                                         加操作: 將obj 添加到s
                  s.remove(obj)                                     刪除操作: 將obj 從s 中刪除;如果s 中不存在obj,將引發KeyError
                  s.discard(obj)                                     丟棄操作: remove()的友好版本-如果s中存在obj,從s中刪除它
                  s.pop()                                         Pop 操作: 移除并返回s 中的任意一個元素
                  s.clear()                                         清除操作: 移除s 中的所有元素

          note note

          posted on 2011-06-10 15:23 Antony Lee 閱讀(458) 評論(1)  編輯  收藏 所屬分類: Python學習筆記

          FeedBack:
          # re: Core Python Programming 學習筆記6 - Mapping and Set
          2012-03-07 12:56 | 編程筆記
          剛好在學python. 謝謝分享!  回復  更多評論
            

          <2011年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 和平区| 改则县| 玉田县| 溆浦县| 信丰县| 临沂市| 邵阳市| 临沭县| 海口市| 孝感市| 辉南县| 孝义市| 金秀| 无棣县| 凌海市| 揭阳市| 葫芦岛市| 三穗县| 大名县| 公安县| 镇康县| 安溪县| 临沂市| 屏边| 江山市| 景谷| 建湖县| 岱山县| 临泉县| 乌审旗| 新沂市| 宝丰县| 满洲里市| 丹东市| 兰坪| 潼南县| 山西省| 汉源县| 张家口市| 长岛县| 孝义市|