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

Python基础必掌握的字典Dictionary使用,第1张

学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 
{'魏': '曹 *** ', '呉': '孫権', '蜀': '劉備', '晋': '司馬懿', '他': '董卓'}

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

monarch_dict[1]

Traceback (most recent call last):
  File "", line 1, in <module>
KeyError: 1
字典的访问

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

monarch_dict['魏']
'曹 *** '

monarch_dict['呉']
'孫権'

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

monarch_dict['漢']

Traceback (most recent call last):
  File "", line 1, in <module>
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 "", line 1, in <module>
KeyError: -1

d[0:2]
Traceback (most recent call last):
  File "", line 1, in <module>
TypeError: unhashable type: 'slice'

d.append('e')
Traceback (most recent call last):
  File "", line 1, in <module>
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 = {
	'名前': '碧龍翔扇',
	'攻撃力': '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 "", line 1, in <module>
KeyError: '漢'

'漢' in monarch_dict and monarch_dict['漢']
False
内置字典方法

与字符串和列表一样字典上也是有调用内置方法。

**.clear() **,清空字典数据。

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

d.clear()
d
{}

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

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([, ]) ,删除一个键,如果存在并返回它的值。若不存在引发异常,也可以默认默认值。

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

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

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

d = {'魏': '曹 *** ', '呉': '孫権', '蜀': '劉備'}
d.pop('漢')
Traceback (most recent call last):
  File "", line 1, in <module>
KeyError: '漢'

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

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

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

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

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

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

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

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

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

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

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


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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/787068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存