用户:Xyy23330121/Python/字典
a = {"key1": "value1", "key2": "value2"} #创建字典
print(a["key1"]) #输出:value1
b = {} #创建空字典
以上示例是一个简单的、使用字典的方法。通过输入正确的键,我们可以从字典得到该键对应的值。
几乎所有变量都可以作为字典的键,但可变类型(列表、字典等)不可作为字典的键。
比较运算结果相等的值,比如整数1
、浮点数1.0
和布尔值True
,可以被互换使用,并索引到同一个值。
类似列表,字典也有推导式。我们看以下示例:
a = {x: x ** 2 for x in range(10) if x not in range(:10:2)}
print(a[5]) #输出:25
b = {x: x ** 3 for x in range(10)}
print(b[5]) #输出:125
使用 zip
函数[1],我们可以同时迭代多个可迭代对象。迭代次数按可迭代次数最少的对象来指定。比如:
print(list(zip("Python","012"))) #输出:[('P', '0'), ('y', '1'), ('t', '2')]
于是,我们可以利用该函数配合生成器高效地创建字典,比如:
a = {x: y*3 for x,y in zip(range(10),"Python")}
print(a[5]) #输出:nnn
除 zip
函数之外,Python 内置的 itertools 模块实现了更多高级的可迭代对象作为循环迭代的工具。读者可以查阅对应的 Python 模块文档进行补充。
我们也可以用 dict
函数来创建字典。比如:
a = dict(one=1, two=2, three=3)
b = dict([("one",1),("two",2),["three",3]])
c = dict((("one",1),["three",3]), two = 2)
print(a==b==c) #输出:True
d = dict() #创建空字典
由长度为 2 的列表或元组构成的列表或元组可以直接转化为字典。同时,也可以用类似传入参数的方式生成字典。
要注意,以下的方式是不合法的:
dict(0 = 1) #报错:SyntaxError
对于不符合变量命名规则的键(比如“数字”或“字符串以数字开头”的键),就不能用这种方法。
该方法有两个参数:
- iterable:由可以作为字典键的元素构成的可迭代对象
- value:(可选)这些键对应的值,默认为
None
我们看以下示例:
a = dict.fromkeys("Python",3)
print(a)
#输出:{'P': 3, 'y': 3, 't': 3, 'h': 3, 'o': 3, 'n': 3}
字典是可迭代序列。当对它进行迭代时,等同于对它的“键”进行迭代。迭代顺序则是按“键”被输入的顺序进行。
我们可以通过 list
或 tuple
函数确认这一点。
a = dict.fromkeys("Python",3) #按顺序输入了键 "P" "y" "t" "h" "o" "n"
print(list(a))
类似其它可迭代序列,len
函数会返回字典的项数。而 in
或 not in
则会判断“键”在/不在字典中。
对于创建的一个字典对象 d = {0 : "zero"}
,可以使用 d[0]
来读取 d
中对应键0
的值。但如果字典中没有键 0
则会报错。
此方法仅适用于程序员已经明确了解,所使用的索引是字典的键的时候。如果程序员不知道,则可以参照以下dict.get
方法。
我们看以下示例:
d = {0 : "zero"}
print(d.get(0)) #输出:zero
print(d.get(1)) #输出:None
print(d.get(1,"one")) #输出:one
default
参数的默认值是 None
。如果参数 key
是字典 d
中的键,则 d.get(key)
会返回 d[key]
的值。反之,会返回 default
参数的值。
我们看以下示例:
d = {0 : "zero"}
d[0] = "Zero" #将 d 中对应键 0 的值更新为 "Zero"。
print(d) #输出:{0: 'Zero'}
d[1] = "One" #在 d 中创建新键 1,使其值为 "One"。
print(d) #输出:{0: 'Zero', 1: 'One'}
这种方式无论键是否已经存在,都会对字典进行修改。
我们看以下示例:
d = {0 : "zero"}
dict.setdefault(0, "Zero") #查找 d 中是否已有键 0,由于已有键 0,这里不操作。
print(d) #输出:{0: 'zero'}
dict.setdefault(1, "One") #查找 d 中是否已有键 1,由于没有键 1,这里创建新键 1,使其值为 "One"。
print(d) #输出:{0: 'zero', 1: 'One'}
这种方式只有在键不存在时,才会进行修改。
del d[key]
会删除字典 d
中,对应键 key
的项目。如果没有符合键 key
的项目,则会报错 KeyError
。
使用 d.pop
时。如果 key
存在于字典 d
中,则将其移除并返回其值;
如果 key
不在 d
中,则返回 default
的值。此时,如果 default 未给出,则会报错 KeyError
。
d.popitem
会以“后进先出”的原则,删除字典 d
中最后一个键及其对应的值,并返回其值。如果 d
是空字典,则会报错。
字典同时也是可变序列。与可变序列“列表”相同,如果使用以下方法:
a = {0: None, 1: True}
b = a
b[0] = False
print(a) #输出:{0: False, 1: True}
在更改 b
的时候,会导致 a
的值也发生改变。这是因为 b
和 a
本质上是同一个对象。
字典支持可变序列的这两个操作:
dict.clear()
:对于已有的字典d
,d.clear()
会清除d
中的一切键值对,使其变成一个空字典。dict.copy()
:对于已有的字典d
,d.copy()
会返回d
的一个复制。
这两个方法都会取 other
的值来更新 dict
的值。其结果等同于:
for key in other:
dict[key] = other[key]
other
一般是一个字典,但也可以是任何“可以用dict
函数转化为字典的”对象。
对于 dict.update
的情况,还可以使用这种方式:
dict.update(key = value)
返回一个“相当于 dict
用 other
更新后的字典”的新字典。而 dict
不会被更改。
Python 提供了以下三种方法:
- dict.items():返回所有键值对元组
(键, 值)
构成的视图 - dict.keys():返回所有键构成的视图
- dict.values():返回所有值构成的视图
字典的视图简单来讲就是随着字典更新而更新的可迭代序列。视图支持 len
函数、比较运算 in
和 not in
以及一些其它操作。其他操作不多赘述。