什么是字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
dict = {key1 : value1, key2 : value2, key3 : value3 }
这里不写字典的基础知识,而写一些实际中容易出错的地方
字典定义
字典如果直接赋值是不需要先定义的,否则使用前需要先进行定义
# 直接赋值
>>> dict1 = { 'abc': 456 }
>>> print(dict1['abc'])
456
在代码中常用的方法是将变量直接存入字典中,因此需要先定义再使用。原因是直接使用字典,pyhon不知道dict2是一个字典形式。
>>> dict2['abc']=123
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dict2' is not defined
定义dict2为字典,则能使用
>>> dict2={}
>>> dict2['abc']=123
>>> print(dict2['abc'])
123
二维字典的定义
同样,二维(或多维)字典在使用时也要先定义,这里需要注意的是每一层都需要定义,而不能简单的直接增加一层key
错误用法:
>>> dict3={}
>>> dict['a']['b']=1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object has no attribute '__getitem__'
正确用法:
>>> dict3={}
>>> dict3['a']={}
>>> dict3['a']['b']=1
>>> print(dict3['a'])
{'b': 1}
>>> print(dict3['a']['b'])
1
字典遍历
dict={'apple':'苹果','banana':'香蕉','pear':'梨'}
for key in dict:
print(key)
print(dict[key]
输出:
pear
梨
apple
苹果
banana
香蕉
二维字典遍历
dict={'a':{'b':1},'c':{'b':2}}
for key1 in dict:
for key2 in dict[key1]:
print(key1)
print(key2)
print(dict[key1][key2])
字典key和value的排序
这里使用sorted函数
- 按照key进行排序
>>> dict={'apple':'苹果','banana':'香蕉','pear':'梨'}
>>> sorted(dict.keys())
['apple', 'banana', 'pear']
>>> sorted(dict.keys(), reverse = True)
['pear', 'banana', 'apple']
- 按照value进行排序
>>> dict = {"key1": 5, "key2": 6, "key3": 4, "key4": 3}
>>> sorted(dict.items(), key=lambda item:item[1])
[('key4', 3), ('key3', 4), ('key1', 5), ('key2', 6)]
>>> sorted(dict.items(), key=lambda item:item[1], reverse=True)
[('key2', 6), ('key1', 5), ('key3', 4), ('key4', 3)]
# 此结果是一个list,可分别进行取值
aa=sorted(dict.items(), key=lambda item:item[1])
>>> aa[0]
('key4', 3)
>>> aa[0][1]
3
子函数中的传递
将字典的各个键/值对作为单独的关键字参数传递时,只能使用**
>>> def test(**SP):
... print (SP['key1'])
>>> SP = {'key1': 'value11', 'key2': 'value12'}
>>> test(**SP)
value11
将整个字典作为单个参数传递,则只需传递它,就像使用任何其他参数值一样
>>> def test(SP):
... print (SP['key1'])
>>> SP = {'key1': 'value11', 'key2': 'value12'}
>>> test(SP)
value11
- 同时传递两个字典给子函数时,不能使用**将字典的各个键/值对作为单独的关键字参数传递。
>>> def test(SP,CP):
... print (SP['key1'],CP['key2'])
>>> SP = {'key1': 'value11', 'key2': 'value12'}
>>> CP = {'key1': 'value21', 'key2': 'value22'}
>>> test(SP, CP)
('value11', 'value22')
网友评论