映射类型 --- 字典dict

class dict(**kwargs)

class dict(mapping**kwargs)

class dict(iterable**kwargs)

字典可以通过将以逗号分隔的键:值对列表,包含于花括号之内来创建。

例如: {'jack':4098,'sjoerd':4127} 或 {4098:'jack',4127:'sjoerd'},也可以通过 dict 构造器来创建。

字典中的键可以是任何不可变的类型,如整数、浮点、字符串、元组等。

即便是字典中没有键,也可以给它赋值,这将创建新项目。


字典可用多种方式来创建:

  • 使用花括号内以逗号分隔键:值对的方式

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(type(dict1))
# output: <class 'dict'>
  • 使用字典推导式

dict1 = {x: x ** 2 for x in range(5)}
print(dict1)
# output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
print(type(dict1))
# output: <class 'dict'>
  • 使用类型构造器

dict1 = dict()
print(dict1)
# output: {}
print(type(dict1))
# output: <class 'dict'>

dict2 = dict([('name','python'), ('vision',310)])
print(dict2)
# output: {'name': 'python', 'vision': 310}
print(type(dict2))
# output: <class 'dict'>

dict3 = dict(name='python', vision=310)
print(dict3)
# output: {'name': 'python', 'vision': 310}
print(type(dict3))
# output: <class 'dict'>
​

方法

list(d)

返回字典 d 中使用的所有键的列表。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(list(dict1))
# output: ['name', 'vision']

len(d)

返回字典 d 中的项数。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(len(dict1))
# output: 2

d[key]

返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError

如果字典的子类定义了方法 __missing__() 并且 key 不存在,则 d[key] 操作将调用该方法并附带键 key 作为参数。 d[key] 随后将返回或引发 __missing__(key) 调用所返回或引发的任何对象或异常。 没有其他操作或方法会发起调用 __missing__()。 如果未定义 __missing__(),则会引发 KeyError

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1['name'])
# output: python

d[key] = value

将 d[key] 设为 value

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dict1['name']='C#'
print(dict1['name'])
# output: C#

del d[key]

将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
del dict1['name']
print(dict1)
# output: {'vision': 310}

key in d

如果 d 中存在键 key 则返回 True,否则返回 False

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
for k in list(dict1):
    print(k)
# output: name
# output: vision

key not in d

等价于 not key in d


iter(d)

返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
for i in iter(dict1):
    print(i)
# output: name
# output: vision

clear()

移除字典中的所有元素。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.clear())
# output: None

copy()

返回原字典的浅拷贝。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dict2 = dict1.copy()
print(dict2)
# output: {'name': 'python', 'vision': 310}
dict1['name'] = 'c#'
print(dict1)
# output: {'name': 'c#', 'vision': 310}

classmethod fromkeys(iterable[, value])

使用来自 iterable 的键创建一个新字典,并将键值设为 valuefromkeys() 是一个返回新字典的类方法。 

value 默认为 None。 所有值都只引用一个单独的实例,因此让 value 成为一个可变对象例如空列表通常是没有意义的。

要获取不同的值,请改用 字典推导式

seq = ('Google', 'Runoob', 'Taobao')

dict1 = dict.fromkeys(seq)
print(dict1)
# output: {'Google': None, 'Runoob': None, 'Taobao': None}

dict2 = dict.fromkeys(seq, 10)
print(dict2)
# output: {'Google': 10, 'Runoob': 10, 'Taobao': 10}

get(key[, default])

如果 key 存在于字典中则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.get('name'))
# output: python
print(dict1.get('os', 'key in not exist'))
# output: key in not exist

items()

返回由字典项 ((键, 值) 对) 组成的一个新视图。 参见 视图对象文档

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.items())
# output: dict_items([('name', 'python'), ('vision', 310)])

keys()

返回由字典键组成的一个新视图。 参见 视图对象文档

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.keys())
# output: dict_keys(['name', 'vision'])

pop(key[, default])

如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.pop('name'))
# output: python
print(dict1)
# output: {'vision': 310}

popitem()

从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回。

popitem() 适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。 如果字典为空,调用 popitem() 将引发 KeyError

在 3.7 版更改: 现在会确保采用 LIFO 顺序。 在之前的版本中,popitem() 会返回一个任意的键/值对。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.popitem())
# output: ('vision', 310)
print(dict1)
# output: {'name': 'python'}

reversed(d)

返回一个逆序获取字典键的迭代器。 这是 reversed(d.keys()) 的快捷方式。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
for i in reversed(dict1.keys()):
    print(i)
# output: vision
# output: name

setdefault(key[, default])

如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.setdefault('name', 'windows'))
# output: python
print(dict1.setdefault('os', 'windows'))
# output: windows

update([other])

使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None

update() 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。 如果给出了关键字参数,则会以其所指定的键/值对更新字典: d.update(red=1, blue=2)

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dict1.update(name='windows')
print(dict1)
# output: {'name': 'windows', 'vision': 310}
dict1.update(os='windows')
print(dict1)
# output: {'name': 'windows', 'vision': 310, 'os': 'windows'}

values()

返回由字典值组成的一个新视图。 参见 视图对象文档

两个 dict.values() 视图之间的相等性比较将总是返回 False

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print(dict1.values())
# output: dict_values(['python', 310])
print(dict1.values() == dict1.values())
# output: False

d | other

合并 d 和 other 中的键和值来创建一个新的字典,两者必须都是字典。当 d 和 other 有相同键时, other 的值优先。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dict2 = {'OS': 'windows'}
print(dict2)
# output: {'OS': 'windows'}
print(dict1 | dict2)
# output: {'name': 'python', 'vision': 310, 'OS': 'windows'}

d |= other

用 other 的键和值更新字典 d ,other 可以是 mapping 或 iterable 的键值对。当 d 和 other 有相同键时, other 的值优先。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dict2 = {'OS': 'windows'}
print(dict2)
# output: {'OS': 'windows'}
dict1 |= dict2
print(dict1)
# output: {'name': 'python', 'vision': 310, 'OS': 'windows'}

两个字典的比较当且仅当它们具有相同的 (键, 值) 对时才会相等(不考虑顺序)。 排序比较 ('<', '<=', '>=', '>') 会引发 TypeError

字典会保留插入时的顺序。 请注意对键的更新不会影响顺序。 删除并再次添加的键将被插入到末尾。​​​​​​​ 字典是可逆的。



字典视图对象

由 dict.keys()dict.values() 和 dict.items() 所返回的对象是 视图对象。 该对象提供字典条目的一个动态视图,这意味着当字典改变时,视图也会相应改变。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = dict1.values()
print(dictValues)
# output: dict_values(['python', 310])
dict1['name'] = 'C#'
print(dictValues)  # 动态改变
# output: dict_values(['C#', 310])

字典视图可以被迭代以产生与其对应的数据,并支持成员检测:

len(dictview)

返回字典中的条目数。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = dict1.values()
print(len(dictValues))
# output: 2

iter(dictview)

返回字典中的键、值或项(以 (键, 值) 为元素的元组表示)的迭代器。

键和值是按插入时的顺序进行迭代的。 这样就允许使用 zip() 来创建 (值, 键) 对: pairs = zip(d.values(), d.keys())。 另一个创建相同列表的方式是 pairs = [(v, k) for (k, v) in d.items()].

在添加或删除字典中的条目期间对视图进行迭代可能引发 RuntimeError 或者无法完全迭代所有条目。

在 3.7 版更改: 字典顺序会确保为插入顺序。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = dict1.values()
for item in iter(dictValues):
    print(item)
# output: python
# output: 310
dictItems = dict1.items()
for item in iter(dictItems):
    print(item)
# output: ('name', 'python')
# output: ('vision', 310)
dictKeys = dict1.keys()
for item in iter(dictKeys):
    print(item)
# output: name
# output: vision

x in dictview

如果 x 是对应字典中存在的键、值或项(在最后一种情况下 x 应为一个 (键, 值) 元组) 则返回 True

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = dict1.values()
for item in dictValues:
    print(item)
# output: python
# output: 310

reversed(dictview)

返回一个逆序获取字典键、值或项的迭代器。 视图将按与插入时相反的顺序进行迭代。

在 3.8 版更改: 字典视图现在是可逆的。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = reversed(dict1.values())   # 逆向
for item in iter(dictValues):
    print(item)
# output: 310
# output: python
dictItems = reversed(dict1.items())   # 逆向
for item in iter(dictItems):
    print(item)
# output: ('vision', 310)
# output: ('name', 'python')
dictKeys = reversed(dict1.keys())   # 逆向
for item in iter(dictKeys):
    print(item)
# output: vision
# output: name

dictview.mapping

返回 types.MappingProxyType 对象,封装了字典视图指向的原始字典。

3.10 新版功能.

键视图类似于集合,因为其条目不重复且可哈希。 如果所有值都是可哈希的,即 (键, 值) 对也是不重复且可哈希的,那么条目视图也会类似于集合。 (值视图则不被视为类似于集合,因其条目通常都是有重复的。) 对于类似于集合的视图,为抽象基类 collections.abc.Set 所定义的全部操作都是有效的 (例如 ==< 或 ^)。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
dictValues = dict1.values()
dictValuesMapping = dictValues.mapping
print(dictValuesMapping)
# output: {'name': 'python', 'vision': 310}


字符串格式与字典

使用format_map来指出你将通过一个映射来提供所需的信息。

dict1 = {'name': 'python', 'vision': 310}
print(dict1)
# output: {'name': 'python', 'vision': 310}
print('the name is {name}'.format_map(dict1))
# output: the name is python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值