学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
{'魏': '曹 *** ', '呉': '孫権', '蜀': '劉備', '晋': '司馬昭', '他': '董卓'}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)