1. 程式人生 > >python基礎:集合(set)字典(direction)介紹

python基礎:集合(set)字典(direction)介紹

三、字典(dict)

1.字典的建立
賦值建立字典
In [2]: d = {1,True,"hello"}

In [3]: type(d)
Out[3]: set

#字典由key和value構成,一個key對應一個value,key-value , 鍵值對
In [4]: d = {1:"freya",2:"lili",3:"lucy"}

In [5]: type(d)
Out[5]: dict

In [6]: print d
{1: 'freya', 2: 'lili', 3: 'lucy'}
---------------------

通過工廠函式建立字典
#通過字典的dict()方法建立
In [17]: d = dict(user= "freya",)

In [18]: userinfo = dict(user1="123", user2="456", user3 ="789")

In [19]: print userinfo
{'user2': '456', 'user3': '789', 'user1': '123'}

# 通過字典的 fromkeys 方法建立字典,所有元素有一個預設值
# 如果沒有指定預設值,預設為 None;
print {}.fromkeys("hello")
{'h': None, 'e': None, 'l': None, 'o': None}
# 給每個元素設定預設值為 "123";
print {}.fromkeys(["user1", "user2", "user3"], "123")
{'user2': '123', 'user3': '123', 'user1': '123'}
--------------------- 

應用案例: 生成多個銀行卡號,並初始化密碼為”000000”

# 卡號由 6 位組成, 前 3 位是 610 , 後面的依次是 001, 002, 003...100
cardids = []
for i in range(1, 10): # i = 1, 2, 3, 4...100
a = "610%.3d" %(i) # a= 610001, 610002, 610003, ....610100
cardids.append(a)
print {}.fromkeys(cardids, "000000")
---------------------

2.分析字典的特性(跟元組和列表比較)

字典不能索引和切片,因為字典是無序的資料型別
字典不支援重複和連線
字典支援成員操作符: 判斷字典的key值是否在字典中存在
In [25]: userinfo = dict(user1="123", user2="456", user3 ="789")

In [26]: "user1" in userinfo
Out[26]: True

In [27]: "123" in userinfo #由於是判斷字典的key值是否在字典中,而該語句判斷的是value,故返回false
Out[27]: False
---------------------

(1)增

字典名[key] = value
###value的資料型別為字串
In [30]: d = {1:"freya",2:"lili"}

In [31]: d[3] = "lucy"

In [32]: print d
{1: 'freya', 2: 'lili', 3: 'lucy'}

###字典內的value的資料型別也為字典的情況
In [36]: d = {"freya":{1:"freya"},"lili":{2:"lili"}}

In [37]: d["lucy"] = {3:"lucy"}

In [38]: print d
{'lili': {2: 'lili'}, 'lucy': {3: 'lucy'}, 'freya': {1: 'freya'}}
---------------------

update()方法
update 方法實現新增: key 存在,覆蓋 value 值, 否則,就是新增
語法格式:
字典名.update(key=value)
字典名.update({key:value})
In [46]: print d
{'lili': {2: 'lili'}, 'freya': {1: 'freya'}}

#使用update的方法可以新增多個鍵值對,注意:鍵不打引號
In [47]: d.update(tom={4:"tom"},peter={5:"peter"})

In [48]: print d
{'peter': {5: 'peter'}, 'lili': {2: 'lili'}, 'freya': {1: 'freya'}, 'tom': {4: 'tom'}}
---------------------
(2)刪 
以字典名d為例 
- d.pop(key) 刪除指定 key 的字典元素 
- d.popitem()隨機刪除字典的 key-value 元素 
- del d[key]刪除指定 key 的字典元素; 
- d.clear()清空字典元素 

(3)查 
- 檢視key值

In [60]: services = {'ftp': 22, 'http': [80, 8080]}

In [61]: services.keys() Out[61]: ['ftp', 'http']
  • 檢視value值
In [62]: services = {'ftp': 22, 'http': [80, 8080]}

In [63]: services.values() Out[63]: [22, [80, 8080]]

檢視key-value鍵值對
In [65]: services = {'ftp': 22, 'http': [80, 8080]}

In [66]: services.items()
Out[66]: [('ftp', 22), ('http', [80, 8080])]
---------------------

檢視key是否存在
# 檢視 key是否存在
In [67]: services = {'ftp': 22, 'http': [80, 8080]}

In [68]: services.has_key('ftpp')
Out[68]: False

#檢視指定 key 對應的 value 值
In [71]: services = {'ftp': 22, 'http': [80, 8080]}

In [72]: services["ftp"] #當key存在,返回 value 值
Out[72]: 22

In [73]: services["tp"] #當key不存在,直接報錯
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-73-51d7e8789a37> in <module>()
----> 1 services["tp"]

KeyError: 'tp'

##解決該問題可以使用
services.get(key) 如果 key 不存在,不報錯; 如果存在,返回 value 值
---------------------

(4)改(類似與增)

字典名[key]=value
字典名.update({key:value})
字典名.update(key=value)
4.字典元素迴圈遍歷字典

#遍歷字典的key-value
services = {'ftp': 22, 'http': [80, 8080]}
for i,j in services.items():
print i,j

#執行效果:
ftp 22
http [80, 8080]

#預設情況下遍歷字典的 key 值
services = {'ftp': 22, 'http': [80, 8080]}
for i in services:
print i

#執行效果:
ftp
http
---------------------

四、集合(set)

1.集合的兩個功能:
集合可以實現去重的功能;
集合可以實現關係測試; 交集, 差集,並集, 是否子集, 是否沒有交集……..
2.集合的建立
集合是不重複的資料結構
# 如果花括號裡面為空,則是字典型別
s = {}
print type(s)
<type 'dict'>

s = {1, 2, 3, 2, 3}
print type(s)
print s

執行效果:
<type 'set'>
set([1, 2, 3])
---------------------

工廠方法定義集合時, 括號裡面是可迭代的物件, eg: 數值型別不可以
#定義一個空的集合
s = set()

#集合內的成員可以是字串、字典、元組、列表這些可迭代物件

s1 = set("hello")
print s1

s2 = set({'a':1, 'b':2, 'c':3})
print s2

s3 = set((1,2,3,4,5))
print s3

s4 = set([1,2,3,1,2,3])
print s4
---------------------

執行結果:

set(['h', 'e', 'l', 'o']) set(['a', 'c', 'b']) set([1, 2, 3, 4, 5]) set([1, 2, 3])

我麼發現這些輸出都沒有重複的地方,這便體現了集合的第一個功能:去重

tips: 實現列表去重?轉換為集合資料型別
set(列表)
li = [1, 2, 3, 4, 1, 2]
s = set(li)
li = list(s)
print li

執行效果:
[1, 2, 3, 4]
---------------------

3.集合的特性

  • 集合是無序的, 不重複的資料型別
  • 因此不支援索引,也不支援切片;也不支援重複;也不支援連線
  • 支援成員操作符
  • 支援for迴圈,是可迭代的物件
  • 4.集合的增刪差改


    ###使用add()方法
    s = {1, 2, 3, 4, 1, 2}
    print s
    s.add(1) #當新增的是重複的元素,新增失敗
    s.add(7) #當新增的不是重複的元素,新增成功
    print s
    執行效果:
    set([1, 2, 3, 4])
    set([1, 2, 3, 4, 7])

    ###使用update()方法
    s1 = {'a', 'b', 'c'}
    s.update(s1)
    print s
    執行效果:
    set(['a', 1, 2, 3, 4, 7, 'c', 'b'])
    ---------------------


    (1)pop方法的含義是刪除隨機一個元素,若集合為空,則產生錯誤。
    s = {1, 2, 3, 4, 1, 2}
    s.pop()
    print s

    執行結果:
    set([2, 3, 4])

    (2)remove方法刪除集合指定元素, 如果不存在,則報錯。
    s = {1, 2, 3, 4, 1, 2}
    s.remove(2)
    print s

    執行結果:
    set([1, 3, 4])

    (3)discard方法刪除集合指定元素, 如果不存在,do nothing;
    s = {1, 2, 3, 4, 1, 2}
    s.discard(7)
    print s

    執行結果:
    set([1, 2, 3, 4])

    4)clear方法是清空集合元素 s = {1, 2, 3, 4, 1, 2} s.clear() print s 執行效果: set([])

  • 查- (關係測試操作)
    s1 = {1, 2, 3, 4}
    s2 = {1, 2, 3, 5}
    # 交集
    print s1 & s2 or s1.intersection(s2)
    # 並集
    print s1 | s2 or s1.union(s2)
    # 差集
    print s1 - s2 or s1.difference(s2) #s1中有,s2中沒有的元素
    print s2 - s1 or s2.difference(s1) #s2中有,s1中沒有的元素
    # 對等差分,s1和s2的並集減去公共的部分後的元素
    print s1 ^ s2 or s1.symmetric_difference(s2)

    執行結果:
    set([1, 2, 3])
    set([1, 2, 3, 4, 5])
    set([4])
    set([5])
    set([4, 5])

    #判斷兩個集合的關係
    s1.issubset(s2) #判斷s1是否為s2的子集
    s1.issuperset(s2) #判斷s1是否為s2的父集
    s1.isdisjoint(s2) #判斷s1和s2是否沒有交集
    ---------------------

    我們在介紹裡數值型別的資料,以及字串、元組、列表、字典、集合後來對他們的特性做以下總結

    可變資料型別: 列表, 字典, 集合
    不可變資料型別: 數值型別, 字串, 元組
    可變資料型別實現某個功能, 直接改變可變的資料型別
    不可變資料型別實現某個功能,需要將結果賦值給另外一個變數

    是否實現for迴圈(是否為可迭代資料型別)

    可迭代資料型別: str, list, tuple, dict, set
    不可迭代資料型別:數值型別

    是否支援索引,切片, 重複和連線特性

    有序的資料型別: str, list, tuple
    無序的資料型別: dict, set
    ---------------------
    作者:123freya321
    來源:CSDN
    原文:https://blog.csdn.net/zxy15771771622/article/details/79033674
    版權宣告:本文為博主原創文章,轉載請附上博文連結!