Python 字典


字典是由键值对(key-value)组成的无顺序关联数组。


字典中的key是没有重复的,并且是不能更改的,key值可以是字符串、数字、元组等不能改变的值,但不能是字典和列表等可改变的值。value值没有类型限制。

创建字典

字典有下面几种创建方式:

  • 字典元素前后加上一个花括号,字典元素之间使用逗号分隔,元素的key和value之间使用冒号分隔。例如:{1 : 'red', '2' : 'blue'}
  • 通过dict函数将一个序列(sequence)转换成字典。

下面是创建字典的例子:

#!/usr/bin/python
print({1: 'apple', 2: 'banana'})    # {1: 'apple', 2: 'banana'}

lst = [(1, 'dog'), (2, 'cat')]
print(dict(lst))    # {1: 'dog', 2: 'cat'}

lst2 = ('red', 'blue')
lst3 = (1, 2)
print(dict(zip(lst2, lst3)))    # {'red': 1, 'blue': 2}

字典运算符

有下面几个运算符用于字典:

  • ==:比较两个字典是否相等。
  • []:字典索引,字典使用key-value对的key作为索引。用来访问字典中指定key对应的value,增加或更改字典中的元素。
  • in:判断字典是否存在指定key。
  • not in:判断字典是否不存在指定key。

下面是字典运算符的例子:

#!/usr/bin/python
print({1: 'blue', 2: 'red'} == {2: 'red', 1: 'blue'})   # True

d = {'apple': 1, 'red': 2}
d['green'] = 3
print(d)        # {'apple': 1, 'red': 2, 'green': 3}
print(d['red']) # 2

print('green' in d)     # True
print('orange' not in d)    # True

字典推导

字典推导(Dictionary comprehension)把一个可迭代对象映射为一个字典。

字典推导分为两部分,第一部分描述字典元素的生成过程,第二部分是for语句和if语句,迭代取出可迭代对象的元素。

#!/usr/bin/python
print({x: str(x * 2) for x in [1, 2]})      # {1: '2', 2: '4'}

print({x: str(x) * 2 for x in range(6)})    # {0: '00', 1: '11', 2: '22', 3: '33', 4: '44', 5: '55'}

print({x: str(x * 2) for x in range(6) if x % 2 == 0})  # {0: '0', 2: '4', 4: '8'}

增加、更改和删除元素

  • 字典中增加或更改一个元素使用[]运算符,也可以使用字典的update方法增加或更改多个元素。
  • 使用del语句可以删除字典的一个元素,或整个字典,也可以使用字典的clear方法删除字典所有的元素。

下面是增加、更改和删除元素的例子:

#!/usr/bin/python
d = {1: 'apple', 2: 'banana'}
d[3] = 'pear'
print(d)    # {1: 'apple', 2: 'banana', 3: 'pear'}
d.update({4: 'orange', 5: 'lemon'})
print(d)    # {1: 'apple', 2: 'banana', 3: 'pear', 4: 'orange', 5: 'lemon'}

del d[3]    # {1: 'apple', 2: 'banana', 4: 'orange', 5: 'lemon'}
print(d)

d.clear()
print(d)    # {}

del d
#print(d)    # error : NameError: name 'd' is not defined

常用字典函数

  • all:如果字典中的所有key都为True或字典是空的,则返回True。
  • any:如果字典中有一个元素的key为True,则返回True。如果字典是空的,返回False。
  • len:返回字典的长度(元素个数)。
  • sorted:返回一个包含字典中所有key并对key排过序的列表。

下面是常用字典函数的例子:

#!/usr/bin/python
d = {2: 'red', 1 : 'blue'}

print(sorted(d))    # [1, 2]

常用字典方法

  • clear:删除字典中所有的元素。
  • copy:返回字典的浅拷贝。
  • fromkeys:根据指定的序列和值生成一个字典。
  • get:返回字典中指定key对应的value。
  • items:返回字典所有的元素。
  • keys:返回字典的所有key。
  • pop:从字典中删除指定key的元素,并返回这个元素的value。
  • popitem:返回字典中任意一个元素。
  • setdefault:如果字典存在指定key,返回key对应的value。如果不存在指定key,往字典中加入key和指定的值,返回指定的值。
  • update:以指定key-value值,增加或更改字典中的多个元素。
  • values:返回字典的所有value。

下面是常用字典方法的例子:

#!/usr/bin/python

d = {}.fromkeys(['red', 'blue'], 0)
print(d)    # {'red': 0, 'blue': 0}

d['red'] = 1
for k, v in d.items():
    print(k, v, end=', ')   # red 1, blue 0,

print('\n', d.setdefault('red', 2)) # 1
print(d.setdefault('orange', 3))    # 3
print(d)    # {'red': 1, 'blue': 0, 'orange': 3}

for k in d.keys():
    print(k, end=', ')  # blue, orange, red,