zoukankan      html  css  js  c++  java
  • 数据类型--字典

    字典的概念

    字典是存储数据的一种方式,与列表和元祖来说更灵活。
    元祖的局限性:值是无序,不可变的
    列表的局限性:如果里面想存储一个人的名字对应的值时dy,年龄对应的是30。使用一个列表是不行的如下:

    1 >>> t=[name="dy",age=30]
    2   File "<stdin>", line 1
    3     t=[name="dy",age=30]
    4            ^
    5 SyntaxError: invalid syntax
    View Code

    字典的使用方法:

    字典是python中唯一的映射类型是无序的(哈希表)

    字典对象时可变的(数字,字符串,元祖都是不可变;列表和字典是可变的)。

    但是字典的键必须使用不可变对象,并且一个字典中可以使用不同类型的键值。

    keys()或者vales()返回键列表或者值列表。

    items()返回包含键值对的元祖。

    常用操作:

    索引
    新增
    删除
    键、值、键值对
    循环
    长度

    常用的字典方法

    1、len(),hash() (用于判断某个对象是否可以做一个字典的键,非哈希类型报TypeError)

    2、dict.clear():删除字典中的所有元素。

    3、dict.fromkeys(seq,val=None):以seq中的元素为键创建并返回一个字典,val为指定默认值。

    4、dict.get(key,default=None):返回key的value,如果该键不存在返回default指定的值

    5、dict.has_key(key):判断字典中是否存在key,建议使用in或者not in代替。

    6、dict.items():返回键值对元祖的列表。

    7、dict.keys():返回字典中键的列表。

    8、dict.iter*():interitems(),iterkeys(),itervalues()返回迭代子而不是列表。

    9、dict.pop(key[,default]):同get(),区别是若key存在,删除并返回dict[key],若不存在切default未指定值,抛出KeyError异常。

    10、dict.setdefault(key,default=None):同set(),若key存在则返回其value,若key不存在,则dict[key]=default。

    11、dict.update(dict2):将dict2中的键值对添加到字典dict中,如果有重复覆盖,原字典不存在的条目添加进。

    12、dict.values():返回字典中所有值的列表。

    13、del dict1['a']删除字典中键值为a的元素。

    14、dict1.pop('a')删除并且返回键为'a'的元素。

    15、dict1.clear()删除字典所有元素。

    16、del dict1删除整个字典。

    字典的练习:

     1 arg = {'bakend': "www.oldboy.org",
     2        'record': {'server': '100.1.7.9',
     3                  'weight': 20,
     4                  'maxconn': 30
     5                   }
     6        }
     7 
     8 id_db = {
     9     "name": "u1",
    10     "age": 20,
    11     "sar": "M",
    12     "sal": 1000
    13 }
    14 
    15 dic2 = {
    16     "name": "dy",
    17     "age": 40,
    18 }
    19 
    20 
    21 
    22 print(arg)
    23 
    24 
    25 #增加
    26 arg['record']['name'] = "127.0.0.1"
    27 print('增加:',arg)
    28 
    29 #修改
    30 arg['record']['server'] = "127.0.0.1"
    31 arg['record']['weight'] = 10
    32 
    33 print('修改:',arg)
    34 
    35 #删除:
    36 # arg['record'].pop('name') #删除并且返回键为'name'的元素。
    37 # arg.clear()                      #删除字典所有元素。
    38 # del id_db                       #删除整个字典。
    39 del id_db['sar']                  #删除字典中键值为sar的元素。
    40 print('删除:',arg)
    41 print('删除:',id_db)
    42 
    43 
    44 
    45 #初始化一个新的列表:(尽量不要用,除非只有一层)
    46 c = dict.fromkeys([6,7,8],["name",{"alex":"dongye"},444])
    47 print(c)
    48 c[7][1]["name"] = "user1"
    49 print(c)
    50 注意有坑,所有的字典元素都会存在一个内存块的指针中。
    51 
    52 
    53 
    54 
    55 #获取:(没有不会报错,只会返回none)
    56 ret = arg.get('record')
    57 print('获取(无报错):',ret)
    58 ret1 = id_db.get('A4')
    59 print('获取(无报错):',ret1)
    60 
    61 
    62 #将info1的元素覆盖掉info (存在就覆盖,不存在就更新)
    63 id_db.update(dic2)
    64 print('存在就覆盖,不存在就更新: ',id_db)
    65 
    66 
    67 #字典里面取值,如果有就返回,如果没有就创建个新的。
    68 arg.setdefault('record')
    69 print('有就返回,没有就创建', arg)
    70 
    71 arg.setdefault('owner')
    72 print('有就返回,没有就创建', arg)
    73 
    74 arg.setdefault('pwd',1234)
    75 print('有就返回,没有就创建', arg)
    76 
    77 
    78 #for 循环:
    79 #打印Key和valus
    80 #大数据量的时候这样写:
    81 for i in id_db:
    82     print(i,id_db[i])
    83 
    84     
    85 #打印key和key下标:
    86 for k,v in enumerate(info.keys(),1):
    87     print("keys:",k,v)
    View Code

    字典的源代码:

      1 class dict(object):
      2     """
      3     dict() -> new empty dictionary
      4     dict(mapping) -> new dictionary initialized from a mapping object's
      5         (key, value) pairs
      6     dict(iterable) -> new dictionary initialized as if via:
      7         d = {}
      8         for k, v in iterable:
      9             d[k] = v
     10     dict(**kwargs) -> new dictionary initialized with the name=value pairs
     11         in the keyword argument list.  For example:  dict(one=1, two=2)
     12     """
     13 
     14     def clear(self): # real signature unknown; restored from __doc__
     15         """ 清除内容 """
     16         """ D.clear() -> None.  Remove all items from D. """
     17         pass
     18 
     19     def copy(self): # real signature unknown; restored from __doc__
     20         """ 浅拷贝 """
     21         """ D.copy() -> a shallow copy of D """
     22         pass
     23 
     24     @staticmethod # known case
     25     def fromkeys(S, v=None): # real signature unknown; restored from __doc__
     26         """
     27         dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
     28         v defaults to None.
     29         """
     30         pass
     31 
     32     def get(self, k, d=None): # real signature unknown; restored from __doc__
     33         """ 根据key获取值,d是默认值 """
     34         """ D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. """
     35         pass
     36 
     37     def has_key(self, k): # real signature unknown; restored from __doc__
     38         """ 是否有key """
     39         """ D.has_key(k) -> True if D has a key k, else False """
     40         return False
     41 
     42     def items(self): # real signature unknown; restored from __doc__
     43         """ 所有项的列表形式 """
     44         """ D.items() -> list of D's (key, value) pairs, as 2-tuples """
     45         return []
     46 
     47     def iteritems(self): # real signature unknown; restored from __doc__
     48         """ 项可迭代 """
     49         """ D.iteritems() -> an iterator over the (key, value) items of D """
     50         pass
     51 
     52     def iterkeys(self): # real signature unknown; restored from __doc__
     53         """ key可迭代 """
     54         """ D.iterkeys() -> an iterator over the keys of D """
     55         pass
     56 
     57     def itervalues(self): # real signature unknown; restored from __doc__
     58         """ value可迭代 """
     59         """ D.itervalues() -> an iterator over the values of D """
     60         pass
     61 
     62     def keys(self): # real signature unknown; restored from __doc__
     63         """ 所有的key列表 """
     64         """ D.keys() -> list of D's keys """
     65         return []
     66 
     67     def pop(self, k, d=None): # real signature unknown; restored from __doc__
     68         """ 获取并在字典中移除 """
     69         """
     70         D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
     71         If key is not found, d is returned if given, otherwise KeyError is raised
     72         """
     73         pass
     74 
     75     def popitem(self): # real signature unknown; restored from __doc__
     76         """ 获取并在字典中移除 """
     77         """
     78         D.popitem() -> (k, v), remove and return some (key, value) pair as a
     79         2-tuple; but raise KeyError if D is empty.
     80         """
     81         pass
     82 
     83     def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
     84         """ 如果key不存在,则创建,如果存在,则返回已存在的值且不修改 """
     85         """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
     86         pass
     87 
     88     def update(self, E=None, **F): # known special case of dict.update
     89         """ 更新
     90             {'name':'alex', 'age': 18000}
     91             [('name','sbsbsb'),]
     92         """
     93         """
     94         D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
     95         If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
     96         If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
     97         In either case, this is followed by: for k in F: D[k] = F[k]
     98         """
     99         pass
    100 
    101     def values(self): # real signature unknown; restored from __doc__
    102         """ 所有的值 """
    103         """ D.values() -> list of D's values """
    104         return []
    105 
    106     def viewitems(self): # real signature unknown; restored from __doc__
    107         """ 所有项,只是将内容保存至view对象中 """
    108         """ D.viewitems() -> a set-like object providing a view on D's items """
    109         pass
    110 
    111     def viewkeys(self): # real signature unknown; restored from __doc__
    112         """ D.viewkeys() -> a set-like object providing a view on D's keys """
    113         pass
    114 
    115     def viewvalues(self): # real signature unknown; restored from __doc__
    116         """ D.viewvalues() -> an object providing a view on D's values """
    117         pass
    118 
    119     def __cmp__(self, y): # real signature unknown; restored from __doc__
    120         """ x.__cmp__(y) <==> cmp(x,y) """
    121         pass
    122 
    123     def __contains__(self, k): # real signature unknown; restored from __doc__
    124         """ D.__contains__(k) -> True if D has a key k, else False """
    125         return False
    126 
    127     def __delitem__(self, y): # real signature unknown; restored from __doc__
    128         """ x.__delitem__(y) <==> del x[y] """
    129         pass
    130 
    131     def __eq__(self, y): # real signature unknown; restored from __doc__
    132         """ x.__eq__(y) <==> x==y """
    133         pass
    134 
    135     def __getattribute__(self, name): # real signature unknown; restored from __doc__
    136         """ x.__getattribute__('name') <==> x.name """
    137         pass
    138 
    139     def __getitem__(self, y): # real signature unknown; restored from __doc__
    140         """ x.__getitem__(y) <==> x[y] """
    141         pass
    142 
    143     def __ge__(self, y): # real signature unknown; restored from __doc__
    144         """ x.__ge__(y) <==> x>=y """
    145         pass
    146 
    147     def __gt__(self, y): # real signature unknown; restored from __doc__
    148         """ x.__gt__(y) <==> x>y """
    149         pass
    150 
    151     def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
    152         """
    153         dict() -> new empty dictionary
    154         dict(mapping) -> new dictionary initialized from a mapping object's
    155             (key, value) pairs
    156         dict(iterable) -> new dictionary initialized as if via:
    157             d = {}
    158             for k, v in iterable:
    159                 d[k] = v
    160         dict(**kwargs) -> new dictionary initialized with the name=value pairs
    161             in the keyword argument list.  For example:  dict(one=1, two=2)
    162         # (copied from class doc)
    163         """
    164         pass
    165 
    166     def __iter__(self): # real signature unknown; restored from __doc__
    167         """ x.__iter__() <==> iter(x) """
    168         pass
    169 
    170     def __len__(self): # real signature unknown; restored from __doc__
    171         """ x.__len__() <==> len(x) """
    172         pass
    173 
    174     def __le__(self, y): # real signature unknown; restored from __doc__
    175         """ x.__le__(y) <==> x<=y """
    176         pass
    177 
    178     def __lt__(self, y): # real signature unknown; restored from __doc__
    179         """ x.__lt__(y) <==> x<y """
    180         pass
    181 
    182     @staticmethod # known case of __new__
    183     def __new__(S, *more): # real signature unknown; restored from __doc__
    184         """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
    185         pass
    186 
    187     def __ne__(self, y): # real signature unknown; restored from __doc__
    188         """ x.__ne__(y) <==> x!=y """
    189         pass
    190 
    191     def __repr__(self): # real signature unknown; restored from __doc__
    192         """ x.__repr__() <==> repr(x) """
    193         pass
    194 
    195     def __setitem__(self, i, y): # real signature unknown; restored from __doc__
    196         """ x.__setitem__(i, y) <==> x[i]=y """
    197         pass
    198 
    199     def __sizeof__(self): # real signature unknown; restored from __doc__
    200         """ D.__sizeof__() -> size of D in memory, in bytes """
    201         pass
    202 
    203     __hash__ = None
    204 
    205 dict
    字典源代码练习
  • 相关阅读:
    如何把一个一般的git库变成“裸库”?
    MacOSX下杀掉sudo进程
    nginx FastCGI错误Primary script unknown解决办法
    Lua继承userdata
    Unity图文混排
    C++轻量级跨平台文件系统API
    lua_next()
    重载方法匹配算法
    C++模板函数只能全特化不能偏特化
    xcode离线安装包下载
  • 原文地址:https://www.cnblogs.com/abobo/p/8035192.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com