Python基础必掌握的字典Dictionary使用

学Python数据科学,玩游戏、学日语、搞编程一条龙。

整套学习自学教程中应用的数据都是《三国志》游戏中的内容。

Python中的字典由于是对象的集合属于复合数据类型,类似于列表。

字典有时在其他语言中被称为『关联记忆』或『关联数组』。字典由键索引,字符串和数字可以作为键,也可以是任何不可变类型。如果元组仅包含字符串、数字或元组,则元组可以用作键;如果元组直接或间接包含任何可变对象,则不能将其用作键,并且不能将列表用作键。
在这里插入图片描述

定义字典

字典是 Python 对数据结构的实现,通常称为关联数组。字典由『键、值』对的集合组成,每个『键、值』对将键映射到其关联的值。
在这里插入图片描述

通过将逗号分隔的『键、值』对列表括在大括号 ( {} ) 中来定义字典。冒号 ( : ) 将每个键与其关联的值分开。

d = {
    
    
    <key>: <value>,
    <key>: <value>,
      .
      .
      .
    <key>: <value>
}

# 定义一个字典
monarch_dict = {
    
    
	'魏' : '曹操',
	'呉' : '孫権',
	'蜀' : '劉備',
	'晋' : '司馬懿',
	'他' : '董卓'
}

在这里插入图片描述

可以使用内置dict()函数构建字典。

d = dict([
    (<key>, <value>),
    (<key>, <value),
      .
      .
      .
    (<key>, <value>)
])

# 定义一个Team
monarch_dict  = dict([
	('魏' , '曹操'),
	('呉' , '孫権'),
	('蜀' , '劉備'),
	('晋' , '司馬懿'),
	('他' , '董卓')
])

# 另一种定义方式
monarch_dict = dict(= '曹操',= '孫権',= '劉備',= '司馬懿',= '董卓'
)

type(monarch_dict )
<class 'dict'>

monarch_dict 
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬懿', '他': '董卓'}

字典中的条目按定义的顺序显示,使用索引无法指定访问元素。

Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 181, in <module>
    print(monarch_dict[1])
KeyError: 1

字典的访问

通过在方括号[]中指定对应的键,从字典中检索值。

monarch_dict['魏']
'曹操'
monarch_dict['呉']
'孫権'

检索值不在字典中则抛出异常。

monarch_dict['漢']
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 181, in <module>
    print(monarch_dict['漢'])
KeyError: '漢'

现有字典添加数据只需分配新的键和值。

monarch_dict['漢'] = '刘协'
monarch_dict
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬懿', '他': '董卓', '漢': '刘协'}

更新数据,只需为现有键分配一个新值,并且字典内重复的键无法添加。

monarch_dict['晋'] = '司馬昭'
monarch_dict
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓', '漢': '刘协'}

删除数据,使用 del 指定要删除的键。

del monarch_dict['漢']
monarch_dict
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓'}

字典键与列表索引

数字作为键值使用。

d = {
    
    1: '曹操', 2: '孫権', 3: '劉備', 4: '司馬懿', 5: '董卓'}

d
{
    
    1: '曹操', 2: '孫権', 3: '劉備', 4: '司馬懿', 5: '董卓'}

d[2]
'孫権'

不能将字典视为列表。

type(d)
<class 'dict'>

d[-1]
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    d[-1]
KeyError: -1

d[0:2]
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    d[0:2]
TypeError: unhashable type: 'slice'

d.append('e')
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    d.append('e')
AttributeError: 'dict' object has no attribute 'append'

增量构建字典

创建新的空字典通过添加一个新的键和值构建新的字典。

person = {
    
    }
type(person)
<class 'dict'>

person['名前'] = '諸葛亮(しょかつりょう)'
person['字'] = '孔明(こうめい)'
person['勢力'] = '蜀'
person['身長'] = '180cm'
person['交友関係'] = ['劉備', '月英', '姜維']
person['武器データ'] = {
    
    
	'下級': ['翼扇'], 
	'中級': ['白羽扇','緋煌扇','藍鋒扇'],
	'上級': ['碧龍翔扇'],
}

# 创建和访问字典
person
{
    
    '名前': '諸葛亮(しょかつりょう)', '字': '孔明(こうめい)', '勢力': '蜀', '身長': '180cm', '交友関係': ['劉備', '月英', '姜維'], '武器データ': {
    
    '下級': ['翼扇'], '中級': ['白羽扇', '緋煌扇', '藍鋒扇'], '上級': ['碧龍翔扇']}}

person['名前']
'諸葛亮(しょかつりょう)'

person['交友関係']
['劉備', '月英', '姜維']

# 检索字典数据
person['武器データ']['上級']
['碧龍翔扇']

构建的字典中数据类型没有明确的限制。

weapon = {
    
    
	'name': '碧龍翔扇',
	'攻撃力': '144',
	'防御力': '480',
	'備考': '鍛冶屋で購入(30000)、開発',
	'is_used':True,
	True:'is_used'
}

weapon [True]
'is_used'

字典键的限制

任何类型的值都可以用作 Python 中的字典键。

	weapon = {
    
    
	'碧龍翔扇': 'name',
	144: '攻撃力', 
	480: '防御力', 
	'鍛冶屋で購入(30000)、開発': '備考', 
	True: 'is_used', 
	'is_used': True
}

# 可以使用类型和函数等内置对象
d = {
    
    int: 1, float: 2, bool: 3,bin: 1, hex: 2, oct: 3}
d
{
    
    <class 'int'>: 1, <class 'float'>: 2, <class 'bool'>: 3, <built-in function bin>: 1, <built-in function hex>: 2, <built-in function oct>: 3}

元组也可以是字典键,因为元组是不可变的。

d = {
    
    (1, 1): '曹操', (2, 2): '孫権', (3, 3): '劉備'}
d
{
    
    (1, 1): '曹操', (2, 2): '孫権', (3, 3): '劉備'}

字典值的限制

字典的中的值是没有任何限制的。

d = {
    
    0: '三國無雙', 1: '三國無雙', 2: '三國無雙'}

d
{
    
    0: '三國無雙', 1: '三國無雙', 2: '三國無雙'}

d[0] == d[1] == d[2]
True

运算符和内置函数

in 和 not in 运算符。

monarch_dict = {
    
    
	'魏' : '曹操',
	'呉' : '孫権',
	'蜀' : '劉備',
	'晋' : '司馬懿',
	'他' : '董卓'
}

'魏' in monarch_dict
True

'漢' not in monarch_dict
True

短路评估一同使用。

monarch_dict['漢']
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    monarch_dict['漢']
KeyError: '漢'

'漢' in monarch_dict and monarch_dict['漢']
False

内置字典方法

与字符串和列表一样字典上也是有调用内置方法。
在这里插入图片描述
**.clear() **,清空字典数据。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

d.clear()
d
{
    
    }

.get(<key>[, <default>]),返回字典该键的值,若不存在为空也可以设定默认返回值。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

print(d.get('魏'))
'曹操'

print(d.get('漢'))
None

print(d.get('漢', -1))
-1

**.items() **,返回字典中的键值对列表。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

list(d.items())
[('魏','曹操'), ('呉','孫権'), ('蜀','劉備')]

list(d.items())[1][0]
'呉'

.keys(), 返回字典中的键列表。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

list(d.keys())
['魏', '呉', '蜀']

.values() ,返回字典中的值列表。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

list(d.values())
['曹操', '孫権', '劉備']

.pop(<key>[, <default>]) ,删除一个键,如果存在并返回它的值。若不存在引发异常,也可以默认默认值。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

d.pop('魏')
'曹操'

d
{
    
    '呉': '孫権', '蜀': '劉備'}

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}
d.pop('漢')
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    d.pop('漢')
KeyError: '漢'

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

d.pop('漢', -1)
-1

d
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

.popitem(), 从字典中删除键值对。

d = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備'}

d.popitem()
('蜀': '劉備')

d
{
    
    '魏': '曹操', '呉': '孫権'}

# d为空会引发异常
d = {
    
    }
d.popitem()
Traceback (most recent call last):
  File "F:/PythonWorkProject/test.py", line 197, in <module>
    d.popitem()
KeyError: 'popitem(): dictionary is empty'

.update(<obj>),将字典与另一个字典或可迭代的键值对合并。

# (被替换键值).update(替换键值)
d1 = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備','晋': '司馬懿'}
d2 = {
    
    '晋': '司馬昭', '他': '董卓'}
d1.update(d2)
d1
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓'}

# 使用元组更新
d1 = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備','晋': '司馬懿'}
d1.update([('晋', '司馬昭'), ('他', '董卓')])
d1
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓'}


# 指定关键字参数
d1 = {
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備','晋': '司馬懿'}
d1.update(='司馬昭',='董卓')
d1
{
    
    '魏': '曹操', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓'}

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/124443531