布尔类型的数据只有两个:(真)True和(假)False。多用于条件语句或者是作为函数返回值。
将数据组织成键值对(key-value)的形式。例如:‘name’:‘小明’。
其中,name称为键(key),小明为值(value)。拿到键就能在字典中找到相对应的值。
注意: key必须是不可变的。value没有要求.可以保存任意类型的数据
字典的定义:字典名 = {key-value……},定义时可以不立即给出给出键值对,也即定义一个空字典。另外需要注意的是字典内的键值对是无序的。也就是说无法通过索引得到值。
#定义一个简单字典示例 dict = {‘name‘:‘小明‘,‘身高‘:‘175cm‘}
通过 “字典名[key]=value”的方式添加,如果字典中没有该key则添加新的键值对到字典中,如果已经存在,这改变原来的value的值。
dict = {} dict[‘name‘] = ‘小明‘ dict[‘hight‘] = ‘175cm‘ print(dict) "{‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘}" dict[‘name‘] = ‘daming‘ "{‘name‘: ‘daming‘, ‘hight‘: ‘175cm‘}"
对于字典中已经存在了键,而又通过这个键添加新的value值,但是又希望不改变原来的值。这时候就需要用到setdefault()函数。它的作用是如果字典中已经存在键值对,添加失败。反之会将新的键值对添加进去。用法示例:
dict = {} dict[‘name‘] = ‘小明‘ dict[‘hight‘] = ‘175cm‘ print(dict) "{‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘}" dict.setdefault(‘name‘,‘大明‘) print(dict) "{‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘}" dict.setdefault(‘weight‘,‘60KG‘) print(dict) "{‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘}"
同时,setdefault()有返回值。如果成功在字典添加了键值对,返回添加的数据,如上例中的“60KG”,添加失败返回字典中对应的值,如“小明”。
删除使用pop函数;示例:
person ={ ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} person.pop(‘name‘) print(person)
还可以使用popitem,资料显示这个函数是随机删除的,但是在Python3.6.7版本的开发环境中一直删除的是最后一个。
person ={ ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} person.popitem() print(person) "{‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘}"
1)通过键查询。存在返回对应的value,不存在报错。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} ret = person[‘name‘] print(ret)
2)get();通过健来查看,如果这个健不在这个字典中.就会返回None;另外,可以设置找不到对应键时的提示的语句,也就是返回值。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} ret = person.get(‘name‘) ret2 = person.get(‘qian‘,‘查无此项‘) print(ret) print(ret2) ‘小明‘ ‘查无此项‘
第一种跟添加字典内容用的方法一样,不再多说。字典名[key]=value。
第二种方法是使用update函数。同样的也是字典里有了就修改原值,没有就添加新的值。而且update能够批量添加或者修改数据。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} person.update({‘sex‘:‘男‘,‘number‘:‘10110‘,‘name‘:‘大明‘}) print(person) "{‘name‘: ‘大明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘, ‘sex‘: ‘男‘, ‘number‘: ‘10110‘}"
1)获取字典的所有键,keys()。将所有键放在列表中返回。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} ret = person.keys() print(ret) "dict_keys([‘name‘, ‘hight‘, ‘weight‘])"
2)获取字典的值,values()。返回值是值的列表。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} ret = person.values() print(ret) "dict_values([‘小明‘, ‘175cm‘, ‘60KG‘])"
3)获取字典的键值对,items()。返回键值对的列表。
person = { ‘name‘: ‘小明‘, ‘hight‘: ‘175cm‘, ‘weight‘: ‘60KG‘} ret = person.items() print(ret) "dict_items([(‘name‘, ‘小明‘), (‘hight‘, ‘175cm‘), (‘weight‘, ‘60KG‘)])"
原则:保证key是不可变的就行了。只要key不变,随便嵌套吧。示例:
dict = { ‘country‘:‘中国‘, ‘province‘:{‘p1‘:‘湖北‘,‘p2‘:‘湖南‘,‘p3‘:‘上海‘}, ‘citys‘:[‘北京‘,‘上海‘,‘深圳‘] } print(dict)
集合内元素是不可变的,每个元素都是独一无二的,而且是无须的。所以常用来去重。
set1 = {1,‘2‘,‘abc‘,True,1} print(set1)# {‘2‘, 1, ‘abc‘} set2 = {‘2‘,‘abc‘,True,1} print(set2)#{True, ‘2‘, ‘abc‘} set3 = {‘2‘,‘abc‘,False,1,0} print(set3)#{False, 1, ‘2‘, ‘abc‘} set4 = {0,‘2‘,‘abc‘,False,1,0} print(set4)#{0, 1, ‘2‘, ‘abc‘}
集合内同时有1和True时,从左起先找到那个显示那个。0和false也是同样的情况。
增用add 和update
s = {"刘嘉玲", ‘关之琳‘, "王祖贤"} s.add("郑裕玲") print(s) s.add("郑裕玲") # 重复的内容不会被添加到set集合中 print(s) s = {"刘嘉玲", ‘关之琳‘, "王祖贤"} s.update("麻花藤") # 迭代更新 print(s) s.update(["张曼?", "李若彤","李若彤"]) print(s) """{‘郑裕玲‘, ‘刘嘉玲‘, ‘王祖贤‘, ‘关之琳‘} {‘郑裕玲‘, ‘刘嘉玲‘, ‘王祖贤‘, ‘关之琳‘} {‘刘嘉玲‘, ‘花‘, ‘藤‘, ‘关之琳‘, ‘麻‘, ‘王祖贤‘} {‘张曼?‘, ‘刘嘉玲‘, ‘花‘, ‘李若彤‘, ‘藤‘, ‘关之琳‘, ‘麻‘, ‘王祖贤‘}"""
删除
s = {"刘嘉玲", ‘关之琳‘, "王祖贤","张曼?", "李若彤"} item = s.pop() # 随机弹出?个. print(s) print(item) s.remove("关之琳") # 直接删除元素.不存在这个元素. 删除会报错 print(s) s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和字典区别
修改;set集合中的数据没有索引。 也没有办法去定位?个元素。所以没有办法进?直接修改。我们可以采?先删除后添加的?式来完成修改操作。
s = {"刘嘉玲", ‘关之琳‘, "王祖贤","张曼?", "李若彤"} # 把刘嘉玲改成赵本? s.remove("刘嘉玲") s.add("赵本?") print(s)
查询;集合是可迭代对象,可以通过循环获取集合内的元素。
3、集合的交,并等操作
s1 = {"刘能", "赵四", "???"} s2 = {"刘科?", "冯乡?", "???"} # 交集 # 两个集合中的共有元素 print(s1 & s2) # {‘???‘} print(s1.intersection(s2)) # {‘???‘} # 并集 print(s1 | s2) # {‘刘科?‘, ‘冯乡?‘, ‘赵四‘, ‘???‘, ‘刘能‘} print(s1.union(s2)) # {‘刘科?‘, ‘冯乡?‘, ‘赵四‘, ‘???‘, ‘刘能‘} # 差集 print(s1 - s2) # {‘赵四‘, ‘刘能‘} 得到第?个中单独存在的 print(s1.difference(s2)) # {‘赵四‘, ‘刘能‘} # 反交集 print(s1 ^ s2) # 两个集合中单独存在的数据 {‘冯乡?‘, ‘刘能‘, ‘刘科?‘, ‘赵四‘} print(s1.symmetric_difference(s2)) # {‘冯乡?‘, ‘刘能‘, ‘刘科?‘, ‘赵四‘} s1 = {"刘能", "赵四"} s2 = {"刘能", "赵四", "???"} # ?集 print(s1 < s2) # set1是set2的?集吗? True print(s1.issubset(s2)) # 超集 print(s1 > s2) # set1是set2的超集吗? False print(s1.issuperset(s2))
集合代码参考自:pythonav.com
元祖,数据不可变的数据的集合。集合内的数据只允许查看,不允许删除和修改值。需要注意的是,这里的不可变是子元素不可变. 而子元素内部的子元素是可以变,比如说列表和字典, 这取决于子元素是否是可变对象。而且,元祖内只有一个元素是要多加一个逗号。
元祖通过索引访问元素:
tuple1 = (‘w‘,‘我‘,‘你‘,‘10110‘) print(tuple1[0],tuple1[1],tuple1[2]) ‘w 我 你‘
元祖是可迭代类型数据,可以使用循环读取元素值:
tuple1 = (‘w‘,‘我‘,‘你‘,‘10110‘) for item in tuple1: print(item)
元祖可以切片:
tuple1 = (‘w‘,‘我‘,‘你‘,‘101100‘) tu = tuple1[2:] print(tu)
原文:https://www.cnblogs.com/970401xcj/p/10441376.html