1.字典以键值对组成,包含在{}中,字典的键必须为hashable,即不可变(字符串、元组、数字),并且唯一;值可以是任何类型
# dict1 = {[1]: 1} # 报错:TypeError: unhashable type: 'list'
# dict1 = {{1}: 1} # 报错:TypeError: unhashable type: 'set'
dict1 = {(1,): 1}
print(dict1) # {(1,): 1}
dict1 = {"12": 122}
print(dict1) # {'12': 122}
dict1 = {1: 12}
print(dict1) # {1: 12}
2.字典的创建有多种,以下几种都等同
dict1 = dict(one=1, two=2)
print(dict1) # {'one': 1, 'two': 2}
dict2={"one":1,"two":2}
print(dict2) # {'one': 1, 'two': 2}
dict3=dict(zip(["one","two"],[1,2]))
print(dict3) # {'one': 1, 'two': 2}
dict4=dict( (("one",1),("two",2)) )
print(dict4) # {'one': 1, 'two': 2}
dict5=dict( [("one",1),("two",2)] )
print(dict4) # {'one': 1, 'two': 2}
dict6=dict({"one":1,"two":2})
print(dict6) # {'one': 1, 'two': 2}
print(dict1==dict2==dict3==dict4==dict5==dict6) # True
3.键用数字的时候,像1和1.0、1.00都是相同的,可以用来索引同一个字典条目,如果相同的键出现多次,则以最后的值为准
dict1 = {1: 12}
print(dict1) # {1: 12}
dict1 = {1: 12, 1.0: 33}
print(dict1) # {1: 33}
dict1 = {1: 12, 1.0: 33,1.00:666}
print(dict1) # {1: 666}
4.len(dict):表示字典中元素的个数
dict1 = {"a": 1, "aa": 11}
print(len(dict1)) # 2
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(len(dict1)) # 4
5.dict[key]:返回 dict 中以 key 为键的值, 如果key不存在 , 则会引发 KeyError
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(dict1["aa"]) # 11
# print(dict1["c"]) # 报错:KeyError: 'c'
6.dict[key]=value:将 dict[key] 设为 value,若 dict[key]原来存在,则更新原来的value值,否则类似于新加了key-value
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
dict1["a"]=2
dict1["c"]=3
print(dict1) # {'a': 2, 'aa': 11, 'b': 2, 'bb': 22, 'c': 3}
7.key in dict:如果字典dict中存在键 key 则返回 True,否则返回 False
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22,"a ":1000}
print(dict1) # {'a': 1, 'aa': 11, 'b': 2, 'bb': 22, 'a ': 1000}
print("a" in dict1) # True
print("a " in dict1) # True
print(" a" in dict1) # False
8.key not in dict:如果字典dict中不存在键 key 则返回 True,否则返回 False,等同于not key in dict
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22,"a ":1000}
print(dict1) # {'a': 1, 'aa': 11, 'b': 2, 'bb': 22, 'a ': 1000}
print("a" not in dict1) # False
print("a " not in dict1) # False
print(" a" not in dict1) # True
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22,"a ":1000}
print(dict1) # {'a': 1, 'aa': 11, 'b': 2, 'bb': 22, 'a ': 1000}
print(not "a" in dict1) # False
print(not "a " in dict1) # False
print(not " a" in dict1) # True
9.iter(dict):返回以字典的键为元素的迭代器,是 iter(dict.keys()) 的简写
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(dict1.keys()) # dict_keys(['a', 'aa', 'b', 'bb'])
print(iter(dict1.keys())) # <dict_keyiterator object at 0x000002B3109DAA98>
print(list(iter(dict1.keys()))) # ['a', 'aa', 'b', 'bb']
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(iter(dict1)) # <dict_keyiterator object at 0x000001217051AA98>
d=iter(dict1)
print(tuple(d)) # ('a', 'aa', 'b', 'bb')
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(iter(dict1)) # <dict_keyiterator object at 0x000001217051AA98>
d=iter(dict1)
print(list(d)) # ['a', 'aa', 'b', 'bb']
10.dict.clear():删除字典的所有元素,无返回值
dict1 = {"a": 1, "aa": 11,"b":2,"bb":22}
print(dict1.clear()) # None
print(dict1) # {}
dict1.clear()
print(dict1) # {}
11.dict.copy():返回字典的浅拷贝
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
dict2=dict1.copy()
print(dict1) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
print(dict2) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
dict1["a"]=999
print(dict1) # {'a': 999, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
print(dict2) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
dict1["ccc"][0]=99
print(dict1["ccc"]) # [99, 2, 3]
print(dict2["ccc"]) # [99, 2, 3]
dict1["ccc"]=[8,9]
print(dict1["ccc"]) # [8, 9]
print(dict2["ccc"]) # [99, 2, 3]
dict1["ccc"]=888
print(dict1["ccc"]) # 888
print(dict2["ccc"]) # [99, 2, 3]
dict2["fu"][0]=119
print(dict1["fu"]) # [119, [102, 103]]
print(dict2["fu"]) # [119, [102, 103]]
dict2["fu"][1][0]=77
print(dict1["fu"]) # [119, [77, 103]]
print(dict2["fu"]) # [119, [77, 103]]
dict2["fu"][1]=[104,105,106]
print(dict1["fu"]) # [119, [104, 105, 106]]
print(dict2["fu"]) # [119, [104, 105, 106]]
dict2["fu"]=[107,108,[109,110,111]]
print(dict1["fu"]) # [119, [104, 105, 106]]
print(dict2["fu"]) # [107, 108, [109, 110, 111]]
del dict1["a"]
print(dict1) # {'bb': 22, 'ccc': 888, 'dd': (4, 5, 6), 'fu': [119, [104, 105, 106]]}
print(dict2) # {'a': 1, 'bb': 22, 'ccc': [99, 2, 3], 'dd': (4, 5, 6), 'fu': [107, 108, [109, 110, 111]]}
del dict1["fu"]
print(dict1) # {'bb': 22, 'ccc': 888, 'dd': (4, 5, 6)}
print(dict2) # {'a': 1, 'bb': 22, 'ccc': [99, 2, 3], 'dd': (4, 5, 6), 'fu': [107, 108, [109, 110, 111]]}
12.dict.fromkeys(seq[, value]):使用来自 seq的键创建一个新字典,并将键值设为 value,value默认为None
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
dict2=dict.fromkeys(dict1)
print("New Dict2 : ")
print(dict2) # {'a': None, 'bb': None, 'ccc': None, 'dd': None, 'fu': None}
dict3=dict1.fromkeys(dict1,23)
print("New Dict3 : ")
print(dict3) # {'a': 23, 'bb': 23, 'ccc': 23, 'dd': 23, 'fu': 23}
dict3=dict1.fromkeys(dict1,"straa")
print("New Dict3 : ")
print(dict3) # {'a': 'straa', 'bb': 'straa', 'ccc': 'straa', 'dd': 'straa', 'fu': 'straa'}
dict3=dict1.fromkeys(dict1,(1,2))
print("New Dict3 : ")
print(dict3) # {'a': (1, 2), 'bb': (1, 2), 'ccc': (1, 2), 'dd': (1, 2), 'fu': (1, 2)}
dict3=dict1.fromkeys(dict1,[2,3])
print("New Dict3 : ")
print(dict3) # {'a': [2, 3], 'bb': [2, 3], 'ccc': [2, 3], 'dd': [2, 3], 'fu': [2, 3]}
dict3=dict1.fromkeys(dict1,{"a":100})
print("New Dict3 : ")
print(dict3) # {'a': {'a': 100}, 'bb': {'a': 100}, 'ccc': {'a': 100}, 'dd': {'a': 100}, 'fu': {'a': 100}}
dict3=dict1.fromkeys(dict1,{"a","b","a"})
print("New Dict3 : ")
print(dict3) # {'a': {'a', 'b'}, 'bb': {'a', 'b'}, 'ccc': {'a', 'b'}, 'dd': {'a', 'b'}, 'fu': {'a', 'b'}}
dict1={"a":1,"a":101}
dict3=dict1.fromkeys(dict1,2)
print("New Dict3 : ")
print(dict3) # {'a': 2}
13.dict.get(key[, default]):返回指定键key对应的value值,若key不存在,则返回default,default默认为None
注:若key对应的value有值,即使给出default,也是返回value
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.get("a")) # 1
print(dict1.get("a","new value")) # 1
print(dict1.get("e")) # None
print(dict1.get("e",333)) # 333
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]],"a":888}
print(dict1.get("a")) # 888
print(dict1.get("e")) # None
print(dict1.get("e",8989)) # 8989
14.dict.items():返回 元素为(键, 值) 组成的元组,组合而成的列表,可遍历
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.items()) # dict_items([('a', 1), ('bb', 22), ('ccc', [1, 2, 3]), ('dd', (4, 5, 6)), ('fu', [101, [102, 103]])])
print(type(dict1.items())) # <class 'dict_items'>
for d in dict1.items():
print(d)
print(type(d))
'''上述结果:
('a', 1)
<class 'tuple'>
('bb', 22)
<class 'tuple'>
('ccc', [1, 2, 3])
<class 'tuple'>
('dd', (4, 5, 6))
<class 'tuple'>
('fu', [101, [102, 103]])
<class 'tuple'>'''
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]],"a":888}
print(dict1.items()) # dict_items([('a', 888), ('bb', 22), ('ccc', [1, 2, 3]), ('dd', (4, 5, 6)), ('fu', [101, [102, 103]])])
15.dict.keys():同第9点 iter(dict)
16.pop(key[, default]):如果 key 存在于字典中,则将其移除,并且无论是否给出default值,都返回其对应的value值;如果 key 不存在,但给出default,则返回 default值;如果 default 未给出且 key 不存在于字典中,则会引发 KeyError
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.pop("a", 1)) # 1
print(dict1) # {'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
print(dict1.pop("bb")) # 22
print(dict1) # {'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
#key"deded"不存在,但是给定了默认值
print(dict1.pop("deded","wuwuwu")) # wuwuwu
#pop方法必须带参数
# print(dict1.pop()) # 报错:TypeError: pop expected at least 1 arguments, got 0
#key“abc”不存在,并且未给定默认值
# print(dict1.pop("abc")) # 报错: KeyError: 'abc'
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]],"a":888}
print(dict1.pop("a", 1)) # 888
print(dict1) # {'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
print(dict1.pop("a", 123)) # 123
print(dict1) # {'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]]}
17.popitem():从字典中移除并返回一个 (键, 值) 对,3.7版本后会按 “后进先出”的顺序被返回,但是如果字典为空,调用 popitem() 将引发 KeyError
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
# print(dict1.popitem("a", 1)) # 报错:TypeError: popitem() takes no arguments (2 given)
print(dict1.popitem()) # ('fu', [101, [102, 103]])
print(dict1) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6)}
dict1.popitem()
dict1.popitem()
print(dict1) # {'a': 1, 'bb': 22}
dict1.popitem()
print(dict1) # {'a': 1}
dict1.popitem()
print(dict1) # {}
# dict1.popitem() # 报错:KeyError: 'popitem(): dictionary is empty'
18.setdefault(key[, default]):如果存在键 key,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default;default若不给出,默认为 None
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.setdefault("a")) # 1
再看一个场景:
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.setdefault("a")) # 1
print(dict1.setdefault("a",99)) # 1
print(dict1.setdefault("abc")) # None
print(dict1.setdefault("abc",999)) # None
print(dict1.setdefault("k", 12321)) # 12321
print(dict1) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]], 'abc': None, 'k': 12321}
(1)由上可见,如果key存在,该方法不会更改原来的值,如果不存在,该方法无论调用几次,只取第一次的default的值
(2)该方法与dict[key]=value的区别:如果key不存在,setdefault(key,value)方法等同dict[key] = value;但是当key在字典中存在,setdefault(key,value)不会改变原值,而dict[key] = value是会改变原值。所以setdefault方法主要用于向字典中添加一个key-value对,而不是修改key对应的值。
19.dict.update(other):把字典参数 other的 key/value(键/值) 对/包含键值对更新到字典 dict 里;该方法无返回值
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
dict2={"name":"Mike","age":18}
print(dict1.update(dict2)) # None
print(dict1) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]], 'name': 'Mike', 'age': 18}
如果给出关键字参数,也能更新:
dict1={"a":1,"b":2}
dict1.update((("c",3),("d", 4)))
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
dict1.update([("e",5),("f", 6)])
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
dict1.update(dict(g=7,h=8))
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8}
dict1.update()
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8}
dict1.update(g1=71,h1=81)
print(dict1) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'g1': 71, 'h1': 81}
# dict1.update(dict(i=9,i=99)) # 报错:dict1.update(dict(g=7,h=8))
如果更新的键有重复,则取最新的键值:
dict3={"age":22}
dict4={"sex":"female","color":"red","a":23}
dict1.update(dict3)
print(dict1) # {'a': 1, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]], 'name': 'Mike', 'age': 22}
dict1.update(dict4)
print(dict1) # {'a': 23, 'bb': 22, 'ccc': [1, 2, 3], 'dd': (4, 5, 6), 'fu': [101, [102, 103]], 'name': 'Mike', 'age': 22, 'sex': 'female', 'color': 'red'}
20.dict.values():返回字典的值组成的新视图
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.values()) # dict_values([1, 22, [1, 2, 3], (4, 5, 6), [101, [102, 103]]])
print(list(dict1.values())) # [1, 22, [1, 2, 3], (4, 5, 6), [101, [102, 103]]]
print(tuple(dict1.values())) # (1, 22, [1, 2, 3], (4, 5, 6), [101, [102, 103]])
21.两个字典的异同
(1)字典的keys()和items()支持集合的运算
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.keys()) # dict_keys(['a', 'bb', 'ccc', 'dd', 'fu'])
dict2 = {"a": 1,"bb":2,"c":[1,2,3],"d":(4,5,6,7),"fu":[101,[102,103]]}
print(dict2.keys()) # dict_keys(['a', 'bb', 'c', 'd', 'fu'])
a=dict1.keys() & dict2.keys()
print(a) # {'fu', 'a', 'bb'}
print(type(a)) # <class 'set'>
b=dict1.keys() - dict2.keys()
print(b) # {'ccc', 'dd'}
print(type(b)) # <class 'set'>
c=dict1.keys() | dict2.keys()
print(c) # {'ccc', 'a', 'bb', 'fu', 'c', 'd', 'dd'}
print(type(c)) # <class 'set'>
dict1={'a': 1, 'b': 2, 'c': 3}
dict2={'b': 2,'c': 'hello', 'e': 6}
a=dict1.items() & dict2.items()
print(a) # {('b', 2)}
print(type(a)) # <class 'set'>
b=dict1.items() - dict2.items()
print(b) # {('a', 1), ('c', 3)}
print(type(b)) # <class 'set'>
c=dict1.items() | dict2.items()
print(c) # {('c', 'hello'), ('c', 3), ('e', 6), ('b', 2), ('a', 1)}
print(type(c)) # <class 'set'>
(2)用items()比较异同时,其value值必须为unhashable,否则报错
dict1 = {"a": 1,"bb":22,"ccc":[1,2,3],"dd":(4,5,6),"fu":[101,[102,103]]}
print(dict1.items()) # dict_items([('a', 1), ('bb', 22), ('ccc', [1, 2, 3]), ('dd', (4, 5, 6)), ('fu', [101, [102, 103]])])
dict2 = {"a": 1,"bb":2,"c":[1,2,3],"d":(4,5,6,7),"fu":[101,[102,103]]}
print(dict2.items()) # dict_items([('a', 1), ('bb', 2), ('c', [1, 2, 3]), ('d', (4, 5, 6, 7)), ('fu', [101, [102, 103]])])
# print(dict1.items() & dict2.items()) # 报错:TypeError: unhashable type: 'list'

转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
转存失败重新上传取消
本文介绍了Python字典的基础知识,包括字典的创建、访问、更新和删除操作。讲解了字典的键必须是hashable且唯一,值可任意。讨论了字典的常用方法如len(), get(), pop(), update()等,并对比了setdefault()与直接赋值的区别。还提到了字典的keys()和items()支持集合运算的特点。"
39830257,4847703,大一新生的计算机科学之旅:从零开始,"['计算机科学', '编程入门', '学习策略', '大学教育', '编程实践']
&spm=1001.2101.3001.5002&articleId=99674314&d=1&t=3&u=e09e42267d0e499da538af28b2e98986)
655

被折叠的 条评论
为什么被折叠?



