python字典、集合

python字典、集合

python字典、集合 1

1. Python 字典 2

1.1. 字典基礎 2

1.2. 訪問字典裏的值 2

1.2.1. 實例 3

1.2.2. 輸出結果 3

1.3. 修改字典 3

1.3.1. 實例 3

1.3.2. 輸出結果 3

1.4. 刪除字典元素 4

1.4.1. 實例 4

1.5. 字典鍵的特性 4

1.6. 字典內置函數&方法 5

1.7. 獲取字典最大值及最大值的鍵 5

1.8. 字典字段的比較 6

1.9. dict.keys返回的不是list 6

2. Python 集合 7

2.1. 集合推導式 7

2.2. 集合基礎 7

2.3. 添加元素 8

2.4. 移除元素 9

2.5. 計算集合元素個數 10

2.6. 清空集合 10

2.7. 判斷元素是否在集合中存在 10

2.8. s.update( "字符串" ) 與 s.update( {"字符串"} ) 的區別 11

2.9. 集合set.pop方法刪除元素感想 11

2.10. 使用集合對列表和元組去重 13

2.11. 去重的連個侷限性 13

2.12. 消滅去重的兩個侷限性 13

 

 

  1. Python 字典
    1. 字典基礎

 

字典是另一種可變容器模型,且可存儲任意類型對象.

字典的每個鍵值(key,value)對用冒號(:)分隔,每個對之間用逗號(,)分隔,整個字典包括在花括號({})中,格式如下:

d={key1:value1,key2:value2}

鍵必須是唯一的,但值則不必.

值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組.

 

    1. 訪問字典裏的值

 

吧相應的鍵放入到方括號中

      1. 實例

 

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

 

print ("dict['Name']: ", dict['Name'])

print ("dict['Age']: ", dict['Age'])

      1. 輸出結果

 

dict['Name']:  Runoob

dict['Age']:  7

    1. 修改字典

 

向字典添加新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對

      1. 實例

 

dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

 

dict['Age'] = 8;               # 更新 Age

dict['School'] = "菜鳥教程"  # 添加信息

 

 

print ("dict['Age']: ", dict['Age'])

print ("dict['School']: ", dict['School'])

      1. 輸出結果

 

dict['Age']:  8

dict['School']:  菜鳥教程

 

    1. 刪除字典元素

 

能刪單一的元素也能清空字典,清空只需一項操作.

顯示刪除一個字典用del命令.

      1. 實例

 

dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

 

del dict1['Name'] # 刪除鍵 'Name'

dict1.clear()     # 清空字典

del dict 1        # 刪除字典

 

print ("dict1['Age']: ", dict1['Age'])

print ("dic1t['School']: ", dict1['School'])

但這回引發一個異常,因爲最後一個del操作後,字典不存在

Traceback (most recent call last):

  File "test.py", line 9, in <module>

    print ("dict['Age']: ", dict['Age'])

TypeError: 'type' object is not subscriptable

    1. 字典鍵的特性

 

字典值可以是任何的python對象,既可以是標準的對象,也可以使用戶定義的,但鍵不行.

注意:

1.不允許同一個鍵出現兩次.創建時如果同一個鍵被賦值兩次,後一個值會被記住,即前一個該鍵的值會被代替.

2.鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行.

dict = {['Name']: 'Runoob', 'Age': 7}

 

print ("dict['Name']: ", dict['Name'])

 

以上實例輸出結果:

 

Traceback (most recent call last):

  File "test.py", line 3, in <module>

    dict = {['Name']: 'Runoob', 'Age': 7}

TypeError: unhashable type: 'list'

    1. 字典內置函數&方法

 

字典內置函數len(dict):計算字典元素個數,即鍵的總數.

str(dict):輸出字典,以可打印的字符串表示.

type(varible):返回輸入的變量類型,如果變量是字典就返回字典類型,可以用來判斷數據類型,type通用,後會細講.

字典內置方法clear():刪除字典內所有元素.

copy():返回一個字典的淺賦值.

fromkeys(seq):創建一個新字典,以序列seq中元素做字典的鍵,val爲字典所有鍵對應的初始值.一般seq都是一個列表、元組,如果seq我們寫成字典,則會把字典裏的鍵取出來用作新字典的鍵.並且新建的字典不是原來的字典.

get(key,default=None):返回指定鍵的值,如果值不存在字典中返回default值.

key in dict:如果鍵在字典dict裏返回true,否則返回false

items():以列表返回可遍歷的(鍵,值)元組數組.

keys():返回一個迭代器,可以使用list()來轉化爲列表

setdefault(key,default=None):和get()類似,但如果鍵不存在於字典中,將會添加鍵並將至設爲default.

update(dict2):把字典dict2的鍵/值對更新到dict裏

values():返回一個迭代器,可以使用list()來轉化爲列表

pop(key[,default]):刪除字典給定鍵key所對應的值,返回值爲被刪除的值.key值必須給出,否則,返回default值.

popitem():隨機返回並刪除字典中的一對鍵和值(一般刪除末尾對).

 

    1. 獲取字典最大值及最大值的鍵

 

字典可以通過以下方法調換 key和 value,當然要注意原始 value 的類型,必須是不可變類型:

 

dic = {

    'a': 1,

    'b': 2,

    'c': 3,

}

 

reverse = {v: k for k, v in dic.items()}

 

原理是通過zip把字典的鍵值對壓縮成一個迭代器,然後使用max獲取迭代器中最大的值.

 

print(dic)

print(reverse)

 

輸出如下:

 

{'a': 1, 'b': 2, 'c': 3}

{1: 'a', 2: 'b', 3: 'c'}

    1. 字典字段的比較

 

獲取字典中最大的值及其鍵:

 

prices = {

    'A':123,

    'B':450.1,

    'C':12,

    'E':444,

}

 

max_prices = max(zip(prices.values(), prices.keys()))

print(max_prices) # (450.1, 'B')

    1. dict.keys返回的不是list

 

Python3.x 中會碰到這樣的問題:

 

>>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}

>>> sides = sites_link.keys()

>>> print(sides[0])

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'dict_keys' object does not support indexing

>>>

 

原因說明及解決方法:

 

dict.values()

dict.keys()

 

在 python2.x dict.keys 返回一個列表,但是在在 Python 3.x 下,dict.keys 返回的是 dict_keys 對象,若需要轉換爲列表,請使用:

 

list(dict.values())

list(dict.keys())

 

修改上面實例:

 

>>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}

>>> sides = sites_link.keys()

>>> list(sides)

['runoog', 'google']

>>>

  1. Python 集合
    1. 集合推導式

 

>>>a = {x for x in 'abracadabra' if x not in 'abc'}

>>> a

{'r', 'd'}

 

    1. 集合基礎

 

集合是一個無序不重複元素的序列.

可以使用大括號{}或者set()函數創建集合,注意:創建一個空集合必須用set()而不是{},因爲{}是用來創建一個字典.

 

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}

>>> print(basket)                      # 這裏演示的是去重功能

{'orange', 'banana', 'pear', 'apple'}

>>> 'orange' in basket                 # 快速判斷元素是否在集合內

True

>>> 'crabgrass' in basket

False

 

>>> # 下面展示兩個集合間的運算.

...

>>> a = set('abracadabra')

>>> b = set('alacazam')

>>> a                                  

{'a', 'r', 'b', 'c', 'd'}

>>> a - b                              # 集合a中包含元素

{'r', 'd', 'b'}

>>> a | b                              # 集合a或b中包含的所有元素

{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b                              # 集合a和b中都包含了的元素

{'a', 'c'}

>>> a ^ b                              # 不同時包含於a和b的元素

{'r', 'd', 'b', 'm', 'z', 'l'}

 

    1. 添加元素

 

 語法格式如下:

 

s.add( x )

 

將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.add("Facebook")

>>> print(thisset)

{'Taobao', 'Facebook', 'Google', 'Runoob'}

 

還有一個方法,也可以添加元素,且參數可以是列表,元組,字典等,語法格式如下:

 

s.update( x )

 

x 可以有多個,用逗號分開。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.update({1,3})

>>> print(thisset)

{1, 3, 'Google', 'Taobao', 'Runoob'}

>>> thisset.update([1,4],[5,6])  

>>> print(thisset)

{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}

>>>

 

    1. 移除元素

 

語法格式如下:

 

s.remove( x )

 

將元素 x 添加到集合 s 中移除,如果元素不存在,則會發生錯誤。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.remove("Taobao")

>>> print(thisset)

{'Google', 'Runoob'}

>>> thisset.remove("Facebook")   # 不存在會發生錯誤

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

KeyError: 'Facebook'

>>>

 

此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:

 

s.discard( x )

 

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.discard("Facebook")  # 不存在不會發生錯誤

>>> print(thisset)

{'Taobao', 'Google', 'Runoob'}

 

我們也可以設置隨機刪除集合中的一個元素,語法格式如下:

 

s.pop()

 

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook"))

>>> thisset.pop()

'Taobao'

>>> print(thisset)

{'Facebook', 'Google', 'Runoob'}

    1. 計算集合元素個數

 

語法格式如下:

 

len(s)

 

計算集合 s 元素個數。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> len(thisset)

3

 

    1. 清空集合

 

語法格式如下:

 

s.clear()

 

清空集合 s。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> thisset.clear()

>>> print(thisset)

set()

 

    1. 判斷元素是否在集合中存在

 

語法格式如下:

 

x in s

 

判斷元素 s 是否在集合 x 中存在,存在返回 True,不存在返回 False。

實例(Python 3.0+)

>>>thisset = set(("Google", "Runoob", "Taobao"))

>>> "Runoob" in thisset

True

>>> "Facebook" in thisset

False

>>>

 

    1. s.update( "字符串" ) 與 s.update( {"字符串"} ) 的區別

 

s.update( "字符串" ) 與 s.update( {"字符串"} ) 含義不同:

 

    s.update( {"字符串"} ) 將字符串添加到集合中,有重複的會忽略。

    s.update( "字符串" ) 將字符串拆分單個字符後,然後再一個個添加到集合中,有重複的會忽略。

 

>>> thisset = set(("Google", "Runoob", "Taobao"))

>>> print(thisset)

{'Google', 'Runoob', 'Taobao'}

>>> thisset.update({"Facebook"})

>>> print(thisset)

{'Google', 'Runoob', 'Taobao', 'Facebook'}

>>> thisset.update("Yahoo")

>>> print(thisset)

{'h', 'o', 'Facebook', 'Google', 'Y', 'Runoob', 'Taobao', 'a'}

>>>

    1. 集合set.pop方法刪除元素感想

 

集合用 set.pop() 方法刪除元素的不一樣的感想如下:

 

1、對於 python 中列表 list、tuple 類型中的元素,轉換集合是,會去掉重複的元素如下:

 

>>> list = [1,1,2,3,4,5,3,1,4,6,5]

>>> set(list)

{1, 2, 3, 4, 5, 6}

>>> tuple = (2,3,5,6,3,5,2,5)

>>> set(tuple)

{2, 3, 5, 6}

 

2、集合對 list 和 tuple 具有排序(升序),舉例如下:

 

>>> set([9,4,5,2,6,7,1,8])

{1, 2, 4, 5, 6, 7, 8, 9}

>>> set([9,4,5,2,6,7,1,8])

{1, 2, 4, 5, 6, 7, 8, 9}

 

3、集合的 set.pop() 的不同認爲

 

有人認爲 set.pop() 是隨機刪除集合中的一個元素、我在這裏說句非也!對於是字典和字符轉換的集合是隨機刪除元素的。當集合是由列表和元組組成時、set.pop() 是從左邊刪除元素的如下:

 

列表實例:

 

set1 = set([9,4,5,2,6,7,1,8])

print(set1)

print(set1.pop())

print(set1)

 

輸出結果:

 

{1, 2, 4, 5, 6, 7, 8, 9}

1

{2, 4, 5, 6, 7, 8, 9}

 

元組實例:

 

set1 = set((6,3,1,7,2,9,8,0))

print(set1)

print(set1.pop())

print(set1)

 

輸出結果:

 

{0, 1, 2, 3, 6, 7, 8, 9}

0

{1, 2, 3, 6, 7, 8, 9}

 

    1. 使用集合對列表和元組去重

 

首先把列表和元組轉成集合,集合會自動去重,但是因爲集合有自動排序的功能,所以這個時候列表和元組的元素

的位置是發生了變化的,即被集合自動排序了.

    1. 去重的連個侷限性

 

1、不能保證原來的順序

l = [1,1,1,1,'egon','alex','egon']

s = set(l)

print(s) # {'egon', 1, 'alex'}

l = list(s)

print(l) # ['egon', 1, 'alex']

2、不能針對可變類型去重

l = [1,1,1,1,'egon','alex','egon',{'a':1}]

s = set(l)

print(s) # 報錯

    1. 消滅去重的兩個侷限性

 

info = [

{'name':'egon', 'age':18},

{'name':'alex', 'age':73},

{'name':'egon', 'age':18},

{'name':'lxx', 'age':19},

]

l = []

for dic in info:

if dic not in l:

l.append(dic)

# l = [

{'name':'egon', 'age':18},

{'name':'alex', 'age':73},

{'name':'lxx', 'age':19},

]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章