Python内置数据结构----字典

介绍

字典是由key-value键值对组成的可变的、无序的、key不重复的数据集

键的类型:可以是整数和任何不可变的类型,也可以是非整数。如浮点数、字符串或元组。

字典的定义和初始化

dict()

In [12]: d1=dict()

In [13]: d={}

In [14]: print(type(d))
<class 'dict'>
In [22]: d={'a':1,'b':2,'c':None,'d':[1,2]}

In [23]: d
Out[23]: {'a': 1, 'b': 2, 'c': None, 'd': [1, 2]}

dict(**kwargs)

In [16]: dict(a=1)
Out[16]: {'a': 1}

In [17]: dict(a=1,b=['abc'])
Out[17]: {'a': 1, 'b': ['abc']}

dict(iterable,**kwargs)  可迭代对象必须是二元结构

In [6]: d=(("name",'tom'),('age',18))

In [7]:  dict(enumerate(range(5)))
Out[7]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

In [8]:  d=dict((('a',1),))

In [9]: d
Out[9]: {'a': 1}

In [10]: item=(("name",'tom'),('age',18))

In [11]: d=dict(item)

In [12]: d
Out[12]: {'age': 18, 'name': 'tom'}

字典的方法

类方法----dict.fromkeys(iterable,value)

In [7]: dict.fromkeys(range(3))
Out[7]: {0: None, 1: None, 2: None}

In [8]: dict.fromkeys(range(3),('a',))
Out[8]: {0: ('a',), 1: ('a',), 2: ('a',)}

In [9]: dict.fromkeys(range(3),['a','b'])
Out[9]: {0: ['a', 'b'], 1: ['a', 'b'], 2: ['a', 'b']}

In [10]: dict.fromkeys((1,),['a','b'])
Out[10]: {1: ['a', 'b']}

In [12]: {}.fromkeys('name','tom')
Out[12]: {'a': 'tom', 'e': 'tom', 'm': 'tom', 'n': 'tom'}

In [13]: {}.fromkeys(['name'],'tom')
Out[13]: {'name': 'tom'}

In [14]: {}.fromkeys([1],'tom')
Out[14]: {1: 'tom'}

 get(key[,default]) 返回key对应的value,如果key不存在,则返回缺省值default;没有设置default,则返回None

In [13]: d
Out[13]: {'age': 18, 'name': 'tom'}

In [14]: d.get('name')
Out[14]: 'tom'

In [16]: d.get('sex','male')
Out[16]: 'male'

setdefault(key[, default]) 返回key对应的value,如果key不存在,则添加value为default的kv对,并返回default;如果没有设置default,则缺省值为None

In [17]: d
Out[17]: {'age': 18, 'name': 'tom'}

In [18]: d.setdefault('sex','male')
Out[18]: 'male'

In [19]: d
Out[19]: {'age': 18, 'name': 'tom', 'sex': 'male'}

In [20]: d.setdefault('class')

In [21]: d
Out[21]: {'age': 18, 'class': None, 'name': 'tom', 'sex': 'male'}

update([other])  使用other字典对本字典做更新,key不存在就添加,key存在就覆盖已有的key对应的值,就地修改,返回值None

In [1]: d={'age': 18, 'name': 'tom', 'sex': 'male'}

In [2]: d1={4:400}

In [4]: d.update(d1,color='red')

In [5]: d
Out[5]: {4: 400, 'age': 18, 'color': 'red', 'name': 'tom', 'sex': 'male'}

clear() 清空字典,就地修改,返回值None

In [79]: d.clear()

In [80]: d
Out[80]: {}

pop(key[,default]) 从字典中删除key,key存在就返回value,否则返回default。如果为设定default,返回keyerror

In [32]: d=dict.fromkeys(range(10),[1,2,3])

In [33]: d
Out[33]:
{0: [1, 2, 3],
 1: [1, 2, 3],
 2: [1, 2, 3],
 3: [1, 2, 3],
 4: [1, 2, 3],
 5: [1, 2, 3],
 6: [1, 2, 3],
 7: [1, 2, 3],
 8: [1, 2, 3],
 9: [1, 2, 3]}


In [35]: d.pop(1)
Out[35]: [1, 2, 3]

In [36]: d
Out[36]:
{0: [1, 2, 3],
 2: [1, 2, 3],
 3: [1, 2, 3],
 4: [1, 2, 3],
 5: [1, 2, 3],
 6: [1, 2, 3],
 7: [1, 2, 3],
 8: [1, 2, 3],
 9: [1, 2, 3]}

pop方法返回值是引用类型的时候,对其作出修改要注意

In [38]: lst=d.pop(9)

In [39]: lst
Out[39]: [1, 2, 3]

In [40]: lst.append(4)

In [41]: d
Out[41]:
{0: [1, 2, 3, 4],
 2: [1, 2, 3, 4],
 3: [1, 2, 3, 4],
 4: [1, 2, 3, 4],
 5: [1, 2, 3, 4],
 6: [1, 2, 3, 4],
 7: [1, 2, 3, 4],
 8: [1, 2, 3, 4]}

popitem()移除一个键值对,返回item

In [49]: d1
Out[49]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}

In [50]: d1.popitem()
Out[50]: (0, 0)

In [51]: d1.popitem()
Out[51]: (1, 1)

In [52]: d1.popitem()
Out[52]: (2, 2)

In [53]: d1.popitem()
Out[53]: (3, 3)

In [54]: d1.popitem()
Out[54]: (4, 4)

keys()返回字典中key的视图,一定是不重复的值

In [63]: d
Out[63]: {'age': 18, 'name': 'tom', 'sex': 'male'}

In [64]: d.keys()
Out[64]: dict_keys(['sex', 'age', 'name'])

values()返回字典中values的视图,可能有重复值

In [67]: d
Out[67]: {'age': 18, 'name': 'tom', 'sex': 'male'}

In [68]: d.values()
Out[68]: dict_values(['male', 18, 'tom'])

items()返回字典项的列表,每个元素都是一个(key,value)的元组

In [73]: d
Out[73]: {'age': 18, 'name': 'tom', 'sex': 'male'}

In [74]: d.items()
Out[74]: dict_items([('sex', 'male'), ('age', 18), ('name', 'tom')])

字典的遍历

遍历key

In [59]: d={'age': 18, 'name': 'tom', 'sex': 'male'}

In [60]: for k in d:
    ...:     print(k)
    ...:
sex
age
name

In [62]: for k in d.keys():
    ...:     print(k)
    ...:
sex
age
name

遍历value

In [70]: for k in d:
    ...:     print(d.get(k))
    ...:
male
18
tom

In [71]: for k in d.keys():
    ...:     print(d.get(k))
    ...:
male
18
tom

遍历items

In [76]: for k,v in d.items():
    ...:     print(k,v)
    ...:
sex male
age 18
name tom

In [77]: for k,_ in d.items():
    ...:     print(k)
    ...:
sex
age
name

In [78]: for _,v in d.items():
    ...:     print(v)
    ...:
    ...:
male
18
tom

映射字典(很有用)

In [81]: d={'age': 18, 'name': 'tom', 'sex': 'male'}

In [82]: "Tom's sex is {sex}".format_map(d)
Out[82]: "Tom's sex is male"

 

原文地址:https://www.cnblogs.com/zh-dream/p/13682373.html