标签:其他 北京 upd copy efault 内建函数 mac name class
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根
据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可
变类型,如:数字、字符串、元组。
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对
象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
创建字典:
>>> dic1={‘name‘:‘n‘,‘age‘:36,‘sex‘:‘male‘}
>>> dic2=dict(((‘name‘,‘n‘),))
>>> print(dic1) #{‘name‘: ‘n‘, ‘age‘: 36, ‘sex‘: ‘male‘}
>>> print(dic2) #{‘name‘: ‘n‘}
对应操作:
1 增
>>> dic={}
>>> dic[‘name‘] = ‘n‘
>>> dic[‘age‘] = 18
>>> print(dic) # {‘name‘: ‘n‘, ‘age‘: 18}
#setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
>>> a = dic.setdefault(‘name‘, ‘yuan‘)
>>> b = dic.setdefault(‘ages‘, 22)
>>> b = dic.setdefault(‘ages‘, 22)
>>> c = dic.setdefault(‘hobby‘, "girl")
>>> print(a, b, c) # n 22 girl
>>> print(dic) # {‘name‘: ‘n‘, ‘age‘: 18, ‘ages‘: 22}
2 查
>>> dic= {‘name‘: ‘n‘, ‘age‘: 18}
>>> print(dic[‘name‘]) # n
#get() 函数返回指定键的值,如果值不在字典中返回默认值。
>>> print(dic.get(‘age‘,False)) # 18
>>> print(dic.get(‘ages‘,False)) # False
>>> print(dic.items()) # dict_items([(‘name‘, ‘n‘), (‘age‘, 18)])
>>> print(dic.keys()) # dict_keys([‘name‘, ‘age‘])
>>> print(dic.values()) # dict_values([‘n‘, 18])
>>> print(‘name‘ in dic) # True
>>> print(list(dic.values())) # [‘n‘, 18]
3 改
>>> dic = {‘name‘: ‘n‘, ‘age‘: 18}
>>> print(dic) # {‘name‘: ‘n‘, ‘age‘: 18}
>>> dic[‘name‘] = ‘al‘
>>> print(dic) # {‘name‘: ‘al‘, ‘age‘: 18}
>>> dic1 = {‘sex‘: ‘male‘, ‘hobby‘: ‘girl‘, ‘age‘: 36}
#update()方法添加键 - 值对到字典dict1。此函数不返回任何值。
>>> dic.update(dic1)
>>> print(dic) # {‘name‘: ‘al‘, ‘age‘: 36, ‘sex‘: ‘male‘, ‘hobby‘: ‘girl‘}
4 删
>>> dic = {‘name‘: ‘n‘, ‘age‘: 18, ‘class‘: 1}
>>> #dic.clear() # 清空字典
>>> #print(dic) # {}
>>> del dic[‘name‘] #del 根据键删除
>>> print(dic) # {‘age‘: 18, ‘class‘: 1}
>>> a = dic.popitem()
>>> print(a, dic) # (‘class‘, 1) {‘age‘: 18}
>>> print(dic.pop(‘age‘)) # 18
>>> print(dic) # {}
>>> del dic # 删除整个dic
>>> print(dic) #NameError: name ‘dic4‘ is not defined
5 其他操作以及涉及到的方法
5.1 dict.fromkeys
#fromkeys()方法从序列键和值设置为value来创建一个新的字典。
>>> d1=dict.fromkeys([‘host1‘,‘host2‘,‘host3‘],‘Mac‘)
>>> print(d1) #{‘host1‘: ‘Mac‘, ‘host2‘: ‘Mac‘, ‘host3‘: ‘Mac‘}
>>> d1[‘host1‘]=‘xiaomi‘
>>> print(d1) #{‘host1‘: ‘xiaomi‘, ‘host2‘: ‘Mac‘, ‘host3‘: ‘Mac‘}
>>> d2=dict.fromkeys([‘host1‘,‘host2‘,‘host3‘],[‘Mac‘,‘huawei‘])
>>> print(d2) # {‘host1‘: [‘Mac‘, ‘huawei‘], ‘host2‘: [‘Mac‘, ‘huawei‘], ‘host3‘: [‘Mac‘, ‘huawei‘]}
>>> d2[‘host1‘][0]=‘xiaomi‘
>>> print(d2) #{‘host1‘: [‘xiaomi‘, ‘huawei‘], ‘host2‘: [‘xiaomi‘, ‘huawei‘], ‘host3‘: [‘xiaomi‘, ‘huawei‘]}
5.2 d.copy() 对字典 d 进行浅复制,返回一个和d有相同键值对的新字典
>>> dic1=dic.copy()
>>> print(dic) # {‘name‘: ‘n‘, ‘age‘: 18, ‘class‘: 1}
>>> print(dic1) # {‘name‘: ‘n‘, ‘age‘: 18, ‘class‘: 1}
>>> dic1[‘name‘]=‘n1‘
>>> print(dic) # {‘name‘: ‘n‘, ‘age‘: 18, ‘class‘: 1}
>>> print(dic1) # {‘name‘: ‘n1‘, ‘age‘: 18, ‘class‘: 1}
5.3 字典的嵌套
>>> {
>>> ‘北京‘:{
>>> ‘朝阳‘:{
>>> ‘国贸‘:{
>>> ‘CICC‘:{},
>>> ‘HP‘:{},
>>> },
>>> ‘望京‘:{
>>> ‘沫沫‘:{},
>>> },
>>> },
>>> ‘昌平‘:{
>>> ‘沙河‘:{
>>> ‘老男孩‘:{},
>>> ‘包子‘:{},
>>> },
>>> ‘链家‘:{},
>>> ‘我爱我家‘:{},
>>> },
>>> ‘回龙观‘:{},
>>>
>>> },
>>> },
>>> ‘上海‘:{
>>> ‘浦东‘:{
>>> ‘陆家嘴‘:{
>>> ‘cicc‘:{},
>>> ‘高盛‘:{},
>>> },
>>> ‘外滩‘:{},
>>> },
>>> ‘闵行‘:{}
>>> },
>>> }
5.4 sorted(dict) : 返回一个有序的包含字典所有key的列表
>>> dic={5:‘555‘,2:‘222‘,4:‘444‘}
>>> print(dic) #{5: ‘555‘, 2: ‘222‘, 4: ‘444‘}
#sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
#sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
#list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,
#而不是在原来的基础上进行的操作。
>>> print(sorted(dic)) #[2, 4, 5]
5.5 字典的遍历
>>> dic5 = {‘name‘: ‘n‘, ‘age‘: 18}
>>> for i in dic5:
>>> print(i, dic5[i]) # name n age 18
>>> for items in dic5.items():
>>> print(items) # (‘name‘, ‘n‘) (‘age‘, 18)
>>> for keys, values in dic5.items():
>>> print(keys, values) # name n age 18
还用我们上面的例子,存取这个班学生的信息,我们如果通过字典来完成,那:
>>> dic={‘zhangsan‘:{‘age‘:23,‘sex‘:‘male‘},
>>> ‘李四‘:{‘age‘:33,‘sex‘:‘male‘},
>>> ‘wangwu‘:{‘age‘:27,‘sex‘:‘women‘}
>>> }
>>> print(dic) #dic={
#‘zhangsan‘:{‘age‘:23,‘sex‘:‘male‘},‘
# 李四‘:{‘age‘:33,‘sex‘:‘male‘},
# ‘wangwu‘:{‘age‘:27,‘sex‘:‘women‘}
#}
标签:其他 北京 upd copy efault 内建函数 mac name class
原文地址:http://blog.51cto.com/13562606/2059652