python 内置数据结构字典

字典dict是python中最最重要的内置数据结构,它是无序,可变的数据结构,k-v结构key是不可重复的

  • 字典定义初始化

 

In [1]: d1={}

In [2]: d2=dict()

In [3]: d3={'a':1}

In [4]: d4=dict({'a':1})

In [5]: d3
Out[5]: {'a': 1}

In [6]: d4
Out[6]: {'a': 1}
#可以用可迭代的数据类型做定义
In [11]: d5=dict((('a',1),('b',2)))

In [12]: d5
Out[12]: {'a': 1, 'b': 2}
#字典的value可以定义任意数据类型
In [21]: d6={'a':2,'b':{1,2},'c':[1,2,3],'d':('tom','man'),'f':True}

In [22]: d6
Out[22]: {'a': 2, 'b': {1, 2}, 'c': [1, 2, 3], 'd': ('tom', 'man'), 'f': True}

  

字典数据访问

#d[key],存在则返回value,不存在则抛出keyError错误

In [21]: d6={'a':2,'b':{1,2},'c':[1,2,3],'d':('tom','man'),'f':True}
In [23]: d6['a']
Out[23]: 2
#get方法不会抛出错误,可以赋缺省值
In [24]: d6.get('f')
Out[24]: True

In [25]: d6.get('d')
Out[25]: ('tom', 'man')

In [26]: d6.get('g')

In [27]: d6.get('g',123)
Out[27]: 123

#setdefault,如果key存在则返回值,如果不存在key,则添加key,value为None,k-v都设置则添加该k-v对
In [29]: d6.setdefault('a')
Out[29]: 2

In [30]: d6.setdefault('a',3)
Out[30]: 2

In [31]: d6.setdefault('x',3)
Out[31]: 3

In [32]: d6
Out[32]: {'a': 2, 'b': {1, 2}, 'c': [1, 2, 3], 'd': ('tom', 'man'), 'f': True, 'x': 3}

  

字典修改

#d[key]=value,修改字典元素
In [35]: d6['a']
Out[35]: 2

In [36]: d6['a']=45

In [37]: d6['a']
Out[37]: 45

#增加元素update,元组后面必须有逗号,不然会抛出错误(可迭代对象)。直接跟一个字典
In [42]: d6.update((('z',1),))

In [48]: d6.update(({'z':1}))


#字典删除
#pop(key,[value]),当key存在时则删除该键值对并返回value,key不存在pop(key,value)返回该value,没有设置该默认value则抛出keyError异常
#键存在
In [49]: d6.pop('z')
Out[49]: 1

#key不存在
In [56]: d6.pop('xy')
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-56-1a22d2ce0896> in <module>()
----> 1 d6.pop('xy')

KeyError: 'xy'

In [57]: d6.pop('xy',45)
Out[57]: 45

#popitem,返回任意键值对
In [58]: d6.popitem()
Out[58]: ('x', 3)

In [59]: d6.popitem()
Out[59]: ('f', True)

#clear 清空整个字典
In [61]: d6.clear()

#del删除字典,可以删除整个字典,也可以删除字典的键值对
#删除字典
In [64]: d1
Out[64]: {'b': {1, 2}, 'c': [1, 2, 3], 'd': ('tom', 'man')}

In [65]: del d1

In [66]: d1
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-66-2d3a24957153> in <module>()
----> 1 d1

NameError: name 'd1' is not defined

#删除字典键值对
In [68]: del d1['b']

  

字典遍历:d.keys,d.values,d.items方法和直接遍历字典

#遍历字典的key
#第一种直接遍历字典,默认返回key
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for k in d:
    print(k)
#第二种keys方法,会返回一个类似列表的数据结果
In [75]: d.keys()
Out[75]: dict_keys(['a', 'b', 'c', 'd'])

In [76]: type(d.keys())
Out[76]: dict_keys

for k in d.keys():
    print(k)

#第二种items方法,items方法会一个列表元组包涵k-v对
In [78]: d.items()
Out[78]: dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

In [77]: type(d.items())
Out[77]: dict_items

for k,v in d.items():
    print(k)

#遍历value
for k in d:
    print(d[k])

for v in d.values():
    print(v)

for k,v in d.items():
    print(v)

  

 

posted @ 2018-04-19 14:29  mictiger  阅读(477)  评论(0)    收藏  举报