python字典類型

字典類型

1、字典(dict)

若是如今須要存儲個人信息,經過咱們以前學習的數據類型,只有列表可以存儲咱們的信息。使用列表雖然達到了咱們的目的,可是咱們能經過列表取值的時候,是基於咱們已經知道了列表內部全部的元素。所以咱們是否是能夠給列表內的每個元素都添加一個描述信息呢?不然若是不是存個人信息,而是用列表存取了成千上萬個值,那麼咱們怎麼經過索引精準取值呢?這樣看起來好像是不可能的,所以可使用新的數據類型——字典。算法

1.1做用

用來存取多個值,按照key:value的方式存儲,取的時候能夠經過key而非索引取值,key對value具備描述性的做用。存放數據的種類各類各樣而且數據較多的時候可使用字典。學習

1.2定義

在=={}==內用逗號分隔開多個元素,每個元素都是==key:value==的格式,在其中value是任意格式的數據類型,key因爲具備描述性的做用,因此key一般是字符串的類型。優化

user_info = {'name': 'python', 'gender': 'male', 'age': 19,
             'company_info': ['oldboy', 'shanghai', 50]}

print(id(user_info))
print(type(user_info))
print(user_info)

輸出:
2084781392344
<class 'dict'>
{'name': 'python', 'gender': 'male', 'age': 19, 'company_info': ['oldboy', 'shanghai', 50]}

1.3做用

字典取值再也不依賴索引,而是依賴於key,經過[key]便可獲取對應的value值。code

#字典中套列表
user_info = {'name': 'python', 'gender': 'male', 'age': 19,
             'company_info': ['oldboy', 'shanghai', 50]}

print(user_info['name'])
print(user_info['company_info'][1])

輸出:
python
shanghai
#字典中套字典
user_info = {'name': 'python', 'gender': 'male', 'age': 19,
             'company_info': {'c_name':'oldboy','adder': 'shanghai', 'age':50}}

print(user_info['name'])
print(user_info['company_info']['c_name'])


輸出:
python
oldboy

2、字典類型的內置方法(dict)

2.1經常使用操做+內置方法(優先掌握)

  1. 按key值存取值:可存可取也能夠改變索引

    dic = {'a':1,'b':2}
    print(f"first dic['a']:{dic['a']}")
    輸出:
    first dic['a']:1
    
    dic['a'] = 3
    print(f"first dic['a']:{dic['a']}")
    
    輸出:
    first dic['a']:3
    
    dic['a'] = 2
    print(dic)
    #輸出:
    {'a':2,'b':2}
  2. 長度len字符串

    dic = {'a':1,'b':2}
    print(f"len(dic):{len(dic)}")
    輸出:
    len(dic):2
  3. 成員運算in和not inget

    dic = {'a':1,'b':2}
    print(f"'a' in dic :{'a' in dic}")
    print(f"1 in dic : {1 in dic}")
    輸出:
    'a' in dic :True
    1 in dic : False
  4. 刪除del、pop()、popitem()刪除鍵值對,默認刪除最後一個。it

    dic = {'a':1,'b':2}
    print(dic['a'])
    
    print(f"dic.get('a'):{dic.get('a')}")
    
    del dic['a']
    
    print(f"dic.get('a'):{dic.get('a')}")
    輸出:
    1
    dic.get('a'):1
    dic.get('a'):None
    #dict 刪除之pop()
    dic = {'a':1,'b':2}
    dic.pop('a')
    print(dic['b'])
    print(f"dic.pop('b'):{dic.pop('b')}")
    print(f"dic.get('a'):{dic.get('a')}")
    輸出:
    2
    dic.pop('b'):2
    dic.get('a'):None
    #dict 刪除之popitem()
    dic = {'a':1,'b':2}
    ## 隨機刪除一個元素,沒法指定
    print(f"dic.popitem():{dic.popitem()}")
    
    print(f"dic.popitem():{dic.popitem()}")
    輸出:
    dic.popitem():('b', 2)
    dic.popitem():('a', 1)
  5. 鍵key(),值value(),鍵值對items() item用的最多,與解壓縮聯合使用。class

    # dic鍵keys(),值values(),鍵值對items()
    dic = {'a':1,'b':2}
    
    print(f"dic.keys():{dic.keys()}")
    print(f"dic.values():{dic.values()}")
    print(f"dic.items():{dic.items()}")
    
    輸出:
    dic.keys():dict_keys(['a', 'b'])#套列表
    dic.values():dict_values([1, 2])#
    dic.items():dict_items([('a', 1), ('b', 2)])#套元組
    info_dict = {'name': 'wangdapao', 'age': 18, 'height': 120, 'gender': 'female', 'hobby_list': ['dapao', '666', '233']}
    print(info_dict.items())
    
    for i in info_dict.items():
        print(i)
    
    for k, v in info_dict.items():
        print(k, v)
    
    lt = [[1, 2, 3], [2, 3, 4], [5, 6, 7]]
    for a, b, c in lt:
        print(a, b, c)
    #輸出:
    dict_items([('name', 'wangdapao'), ('age', 18), ('height', 120), ('gender', 'female'), ('hobby_list', ['dapao', '666', '233'])])
    ('name', 'wangdapao')
    ('age', 18)
    ('height', 120)
    ('gender', 'female')
    ('hobby_list', ['dapao', '666', '233'])
    name wangdapao
    age 18
    height 120
    gender female
    hobby_list ['dapao', '666', '233']
    1 2 3
    2 3 4
    5 6 7
  6. 循環

    ##dic之循環
    # dic是無序的,可是python3採用了底層優化算法,因此看起來是有序的,可是python2中的字典是無序
    dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    for k, v in dic.items():  # items能夠換成keys()、values()
        print(k, v)
    輸出:
    a 1
    b 2
    c 3
    d 4

2.2掌握下面內置方法

  1. get(獲取),若是沒有,返回None,也能夠指定返回值1

    dic = {'a':1,'b':2}
    
    print(f"dic.get('a'):{dic.get('a')}")
    print(f"dic.get('c'):{dic.get('c')}")
    print(dic.get('c',3))
    輸出:
    dic.get('a'):1
    dic.get('c'):None
    3
  2. update(添加)更新

    dic = {'a':1,'b':2}
    dic1 = {'c':3}
    dic.update(dic1)
    print(f"dic:{dic}")
    輸出:
    dic:{'a': 1, 'b': 2, 'c': 3}
  3. fromkeys(集體添加並賦值)

    dic = dict.fromkeys(['name','age','sex'],None)
    print(dic)
    輸出:
    dic:{'name': None, 'age': None, 'sex': None}
    
    dic = dict.fromkeys(['name','age','sex'],2)
    
    print(f"dic:{dic}")
    輸出:
    dic:{'name': 2, 'age': 2, 'sex': 2}
  4. setdefault(添加字典),有則不變,無則往裏面添加值。

    # dic之setdefault(),有指定key不會改變值;無指定key則改變值
    dic = {'a':1,'b':2,}
    print(f"dic.setdefailt('a'):{dic.setdefault('a',3)}")
    
    print(f"dic:{dic}")
    
    print(f"dic.setfailt('c'):{dic.setdefault('c',3)}")
    
    print(f"dic:{dic}")
    輸出:
    dic.setdefailt('a'):1
    dic:{'a': 1, 'b': 2}
    dic.setfailt('c'):3
    dic:{'a': 1, 'b': 2, 'c': 3}
  5. clear()清空

    dic={1:1,2:2,3:3}
    print(dic)
    dic.clear()
    print(dic)
    
    #輸出:
    {1: 1, 2: 2, 3: 3}
    {}
  6. copy()複製

    dic={1:1,2:2,3:3}
    print(dic)
    dic1 = dic.copy()
    print(dic1)
    #輸出:
    {1: 1, 2: 2, 3: 3}
    {1: 1, 2: 2, 3: 3}

練習

s = 'hello tank tank say hello sb sb'
l = s.split(' ')#對字符串分割以空格爲分界線
print(l)
print(type(l))## 分割以後爲列表
dic = {}
for item in l :
    if item in dic :
        dic[item] += 1
    else:
        dic[item] = 1
print(dic)
輸出:
['hello', 'tank', 'tank', 'say', 'hello', 'sb', 'sb']
<class 'list'>
{'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}
相關文章
相關標籤/搜索