在python中字典是唯一的映射类型,映射是数学上的一个术语,指两个元素集之间元素相互“对应”的关系。与Java中的Map集合很类似。映射类型区别于序列类型,序列类型以数组的形式存储,通过索引的方式类获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的。
- brand=["李宁","耐克","阿迪达斯","Python"]
- slogan=["一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"]
- print("计算机科学的口号是",slogan[brand.index("Python")])
- #运行结果: 计算机科学的口号是 让编程改变世界
两列表的索引和相对的值是没有任何关系的,唯一有联系的就是两个列表间,索引号相同的元素是有关系的。
- #字典的创建
- dict1={"李宁":"一切皆有可能","耐克":"Just do it","阿迪达斯":"Impossible is nothing","Python":"让编程改变世界"}
- print(dict1)
- print("计算机科学的口号是",dict1["Python"])
- 运行结果:
- {'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing', 'Python': '让编程改变世界'}
- 计算机科学的口号是 让编程改变世界
通过以上的案例可以发现,python中的字典的定义与Java中的Map类似,与Json格式也非常类似。
字典的使用很简单,以大括号作为标志性符号,字典是以键值对的方式作为映射关系一一对应,但字典的键必须独一无二,而值可以取任何数据类型。
dict是字典的类名。
- #字典的初始化
- #定义空字典
- dict2={}
- print(type(dict2))#
- dict3=dict((('a',70),('b',170),('c',30),('d',50),('e',60)))
- print(dict3)#{'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60}
以上案例中dict()函数中只能有一个元素,因此将多个元素封装成一个元组作为一个元素传入dict()函数中,也可以用以下方式来定义字典:
- dict4=dict(a=70,b=170,c=30,d=50,e=60)
- print(dict4)
- 运行结果: {'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60}
也可以给字典中进行追加数据
- dict4["f"]=100
- dict4["g"]=200
- print(dict4)
- 运行结果: {'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60, 'f': 100, 'g': 200}
这里总结一些创建字典的六种方式:
- a=dict(one=1,two=2,three=3)
- b={"one":1,"two":2,"three":3}
- c=dict(zip(["one","two","three"],[1,2,3]))
- d=dict({"one":1,"two":2,"three":3})
- e=dict([("one",1),("two",2),("three",3)])
- f=dict((("one",1),("two",2),("three",3)))
- print(a==b==c==d==e==f)
- 输出结果为: True
fromkeys()函数该方法用于创建并返回一个新的字典,有两个参数,第一个参数是字典的键,第二个参数是可选的,是传入键对应的值。如果不提供值,那么默认是None。
- dict1={}
- print(dict1.fromkeys((1,2,3)))#{1: None, 2: None, 3: None}
- print(dict1.fromkeys((1,2,3),"Python"))#{1: 'Python', 2: 'Python', 3: 'Python'}
- print(dict1.fromkeys((1,2,3),("one","two","three")))
- #{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
该函数将("one","two","three")作为一个元素,将该元素传递给三个索引。
keys(),values()和items()函数的用法
- dict2={}
- #快速赋值为32个赞
- dict2=dict2.fromkeys(range(32),"赞")
- print(dict2)
- #获得字典的所有键
- print(dict2.keys())
- #获得字典的所有值
- print(dict2.values())
- #获得字典的所有键值对
- print(dict2.items())
运行结果:
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'} dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) dict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞']) dict_items([(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), (6, '赞'), (7, '赞'), (8, '赞'), (9, '赞'), (10, '赞'), (11, '赞'), (12, '赞'), (13, '赞'), (14, '赞'), (15, '赞'), (16, '赞'), (17, '赞'), (18, '赞'), (19, '赞'), (20, '赞'), (21, '赞'), (22, '赞'), (23, '赞'), (24, '赞'), (25, '赞'), (26, '赞'), (27, '赞'), (28, '赞'), (29, '赞'), (30, '赞'), (31, '赞')])
get()函数用于从字典中根据键取值,如果不存在,则可以设定默认值
- #根据键取值
- print(dict2[1])
- print(dict2.get(1))
- print(dict2.get(32,"不存在该值"))
- 运行结果:
- 赞
- 赞
- 不存在该值
也可以通过in和not in来判断字典中是否存在这个键
- if 32 in dict2:
- print("该键存在")
- else:
- print("该键不存在")
**清除字典的所有数据使用clear()函数。**
copy()函数用于拷贝一个字典,属于值传递,不是引用传递。
- a={"one":1,"two":2,"three":3}
- b=a.copy()
- a["two"]=10
- print(a)
- print(b)
- 运行结果:
- {'one': 1, 'two': 10, 'three': 3}
- {'one': 1, 'two': 2, 'three': 3}
pop()和popitem()函数的使用
- a={"one":1,"two":2,"three":3}
- #根据键输出这个值,并从字典中删除这个元素
- print(a.pop("two"))
- print(a)
- #从字典中输出一个键值对,并从字典中删除这个元素,可作为随机取出
- print(a.popitem())
- print(a)
setdefault()函数和get()函数有点相似,但是setdefault()函数在字典中找不到相应的键时会自动添加至字典中:
- a={"one":1,"two":2,"three":3}
- print(a.setdefault("two"))
- print(a.setdefault(10))
- print(a)
update()函数用于更新字典中的数据
- pets={"米奇":"老鼠","汤姆":"猫","小白":"猪"}
- pets["米奇"]="大老鼠"
- print(pets)#{'米奇': '大老鼠', '汤姆': '猫', '小白': '猪'}
- pets.update(小白="狗")
- print(pets)#{'米奇': '大老鼠', '汤姆': '猫', '小白': '狗'}
字典作为可变字符传入函数的形参时,需要使用**来进行表示
- def test(** params):
- print("有%d个参数"%len(params))
- print("它们分别是:",params)
- test(**pets)
- test(a=1,b=2)
- 运行结果:
- 有3个参数
- 它们分别是: {'米奇': '大老鼠', '汤姆': '猫', '小白': '狗'}
- 有2个参数
- 它们分别是: {'a': 1, 'b': 2}
在python中集合类似与Java中的set集合,集合中用大括号表示,并不能存在重复的数据。
- #集合的使用
- num1={}
- print(type(num1))#以大括号空值表示的不是集合,而是字典
- #
- num2={1,2,3,4,5}
- print(type(num2))#在大括号中没有键值对,只有值,这是集合的格式
- #
集合中不能存在重复的数据
- num3={1,2,3,4,5,1,2,3}
- print(num3)
运行结果为:{1, 2, 3, 4, 5}
集合和字典类似,数据是无序的,因此不能通过索引值来获取其中的元素。
集合的内建函数是set(),因此可以使用该函数将列表,元组转换成集合。
- num3={1,2,3,4,5,1,2,3}
- num4=set([1,2,3,4,5,1,2,3])
- print(num3)
- print(num4)
- print(num3==num4)
运行结果:
{1, 2, 3, 4, 5} {1, 2, 3, 4, 5} True
例如,没有学习set集合之前,要去除具有重复数据的列表中的数据,那案例如下:
- num3=[1,2,3,4,5,1,2,3]
- #通过分片获得副本列表
- temp=num3[:]
- #将原列表清空
- num3.clear()
- for x in temp:
- if x not in num3:
- num3.append(x)
-
- print(num3)
但通过set集合的话就简单了
- num3=[1,2,3,4,5,1,2,3]
- #将列表转换成集合,则会自动去除重复的数据,然后转换会列表
- num3=list(set(num3))
- print(num3)
但需要注意的是列表的元素是有顺序的,set集合的元素是无需的,当将列表转换后成集合的时候,再转换回列表,可能原本的列表的元素顺序不一定是原本的位置。
通过循环迭代的方式访问集合:
- num5={4,5,1,2,3}
- for i in num5:
- print(i,end=" ")
运行结果:1 2 3 4 5
可以使用in和not in来判断某个元素是否存在于集合中。
使用add()方法可以为集合中添加元素,使用remove()方法可以删除集合中存在的元素。
如果不想让集合中的元素被删除,修改和添加,那么我们可以将集合设置为终态,一旦定义后,不允许被改变,这时候需要使用frozenset()函数将集合进行固定起来。