Python 字典
Python字典是无序对象集(如列表)的容器。对象由大括号 { } 包围。字典中的项是以逗号分隔的键:值对列表,其中键和值是 Python 数据类型。
1、按值对字典进行排序(升序和降序)
编写一个Python程序来按值对字典进行排序(升序和降序)。
import operator d = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0} print('Original dictionary : ',d) sorted_d = dict(sorted(d.items(), key=operator.itemgetter(1))) print('Dictionary in ascending order by value : ',sorted_d) sorted_d = dict( sorted(d.items(), key=operator.itemgetter(1),reverse=True)) print('Dictionary in descending order by value : ',sorted_d) ''' Original dictionary : {1: 2, 3: 4, 4: 3, 2: 1, 0: 0} Dictionary in ascending order by value : {0: 0, 2: 1, 1: 2, 4: 3, 3: 4} Dictionary in descending order by value : {3: 4, 4: 3, 1: 2, 2: 1, 0: 0} '''
注:
1、上面代码的operator.itemgetter(1),表示找到d当中维度为1的元素,也就是字典当中的值,如果改成operator.itemgetter(0),则是找到字典当中每个元素的键。
2、operator.itemgetter(1) 就是按照字典的值进行排序,operator.itemgetter(0) 就是按照字典的键进行排序
【1】item
字典中的items()函数:以列表返回可遍历的(键, 值) 元组数组。
d = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0} print(d.items()) print(type(d)) print(type(d.items())) ''' dict_items([(1, 2), (3, 4), (4, 3), (2, 1), (0, 0)]) <class 'dict'> <class 'dict_items'> '''
【2】operator.itemgetter
operator模块提供的itemgetter函数用于获取对象的哪些维的数据
2、向字典添加新键值对
d = {0:10, 1:20} print(d) d.update({2:30}) print(d) ''' {0: 10, 1: 20} {0: 10, 1: 20, 2: 30} '''
【3】update
- 语法:
dict.update(dict2)
- 概述:Python 字典的 update() 函数把字典 dict2 的键/值对更新到 dict 里。
- 参数:dict2 – 添加到指定字典dict里的字典。
- 返回:无
3、连接以下字典以创建新字典
编写一个Python程序来连接以下字典以创建一个新字典。
dic1={1:10, 2:20} dic2={3:30, 4:40} dic3={5:50,6:60} dic4 = {} for d in (dic1, dic2, dic3): dic4.update(d) print(dic4) ''' {1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60} '''
4、合并两个 Python 字典
编写一个 Python 脚本来合并两个 Python 字典。
d1 = {'a': 100, 'b': 200} d2 = {'x': 300, 'y': 200} d = d1.copy() d.update(d2) print(d) ''' {'a': 100, 'b': 200, 'x': 300, 'y': 200} '''
5、使用for循环迭代字典
d = {'Red': 1, 'Green': 2, 'Blue': 3} for x,y in d.items(): print(x, 'corresponds to ',y) ''' Red corresponds to 1 Green corresponds to 2 Blue corresponds to 3 '''
注:x,y分布代表字典当中的键和值
6、将字典中的所有项目相乘
my_dict = {'data1':-1,'data2':2,'data3':3} result=1 for key in my_dict: result=result * my_dict[key] print(result) ''' -6 '''
注意:与第五题进行区分,这里没有使用items函数
7、从字典中删除键值对
myDict = {'a':1,'b':2,'c':3,'d':4} print(myDict) if 'a' in myDict: del myDict['a'] print(myDict) ''' {'a': 1, 'b': 2, 'c': 3, 'd': 4} {'b': 2, 'c': 3, 'd': 4} '''
【4】字典里面的删除方法
- Python字典的clear()方法(删除字典内所有元素)
site= {'name': '我的博客地址', 'wenxin': 10000, 'url':'https://blog.csdn.net/'} pop_obj=site.pop('name') # 删除要删除的键值对,如{'name':'我的博客地址'}这个键值对 print(pop_obj ) # 输出 :我的博客地址 print(site) # 输出:{'wenxin': 10000, 'url': 'https://blog.csdn.net/'}
- Python字典的pop()方法(删除字典给定键 key 所对应的值,返回值为被删除的值)
site= {'name': '我的博客地址', 'a': 10000, 'url':'http://blog.csdn.net/'} pop_obj=site.pop('name') # 删除要删除的键值对,如{'name':'我的博客地址'}这个键值对 print pop_obj # 输出 :我的博客地址
- Python字典的popitem()方法(随机返回并删除字典中的一对键和值)
site= {'name': '我的博客地址', 'a': 10000, 'url':'http://blog.csdn.net/'} pop_obj=site.popitem() # 随机返回并删除一个键值对 print pop_obj # 输出结果可能是{'url','http://blog.csdn.net/'}
- del 全局方法(能删单一的元素也能清空字典,清空只需一项操作)
site= {'name': '我的博客地址', 'a': 10000, 'url':'http://blog.csdn.net/'} del site['name'] # 删除键是'name'的条目 del site # 清空字典所有条目
8、按键对字典进行排序
编写一个Python程序来按键对给定的字典进行排序
color_dict = {'red':'#FF0000', 'green':'#008000', 'black':'#000000', 'white':'#FFFFFF'} print(sorted(color_dict))#输出:['black', 'green', 'red', 'white'] for key in sorted(color_dict): print("%s: %s" % (key, color_dict[key])) ''' black: #000000 green: #008000 red: #FF0000 white: #FFFFFF '''
分析:直接使用print(sorted(color_dict))
对字典color_dict
进行排序,则是按照键的顺序进行排序,返回值是排序好的键的列表。
9、获取字典中的最大值和最小值
编写一个Python程序来获取字典中的最大值和最小值。
my_dict = {'a':7, 'b':8, 'c': 2} key_max = max(my_dict.keys(), key=(lambda k: my_dict[k])) key_min = min(my_dict.keys(), key=(lambda k: my_dict[k])) print('Maximum Value: ',my_dict[key_max]) print('Minimum Value: ',my_dict[key_min]) ''' Maximum Value: 8 Minimum Value: 2 '''
注:print(my_dict['a'])
得到的就是my_dict这个字典的,键名为a,的对应的值。
【5】keys
keys功能:获取当前字典中所有的键( key )
keys的用法:dict.keys() ->无需传参,返回一个key集合的伪列表
my_dict = { 'name' : 'insane' , 'age' : 33} my_dict.keys () # 输出:dict_keys ( [ 'name' , 'age' ] ) # 不具备列表的所有功能 key_list = list(my_dict.keys()) # 这样后就具备列表的所有功能 key_list [ 'name' , 'age ' ]
【6】max函数
max(iterable, *[, key, default]) max(arg1, arg2, *args[, key])
函数功能为取传入的多个参数中的最大值,或者传入的可迭代对象元素中的最大值。
默认数值型参数,取值大者;
字符型参数,取字母表排序靠后者。
1、key—可做为一个函数,用来指定取最大值的方法。
2、default—用来指定最大值不存在时返回的默认值。
3、arg1—字符型参数/数值型参数,默认数值型
10、检查字典是否为空
编写一个Python程序来从字典中删除重复项。
my_dict = {} if not bool(my_dict): print("Dictionary is empty") print(bool(my_dict)) ''' Dictionary is empty False '''
11、组合两个字典,为公共键添加值
编写一个Python程序来组合两个字典,为公共键添加值。
11、组合两个字典,为公共键添加值 编写一个Python程序来组合两个字典,为公共键添加值。
【7】Counter
主要功能:可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。
from collections import Counter list1 = ["a", "a", "a", "b", "c", "c", "f", "g", "g", "g", "f"] dic = Counter(list1) print(dic) #结果:次数是从高到低的 #Counter({'a': 3, 'g': 3, 'c': 2, 'f': 2, 'b': 1}) print(dict(dic)) #结果:按字母顺序排序的 #{'a': 3, 'b': 1, 'c': 2, 'f': 2, 'g': 3} print(dic.items()) #dic.items()获取字典的key和value #结果:按字母顺序排序的 #dict_items([('a', 3), ('b', 1), ('c', 2), ('f', 2), ('g', 3)]) print(dic.keys()) #结果: #dict_keys(['a', 'b', 'c', 'f', 'g']) print(dic.values()) #结果: #dict_values([3, 1, 2, 2, 3]) print(sorted(dic.items(), key=lambda s: (-s[1]))) #结果:按统计次数降序排序 #[('a', 3), ('g', 3), ('c', 2), ('f', 2), ('b', 1)] for i, v in dic.items(): if v == 1: print(i) #结果: #b
12、在字典中查找对应键的最大 3 个值
from heapq import nlargest my_dict = {'a':500, 'b':5874, 'c': 560,'d':400, 'e':5874, 'f': 20} three_largest = nlargest(3, my_dict, key=my_dict.get) print(three_largest) ''' ['b', 'e', 'c'] '''
【8】nlargest
在pandas库里面,我们常常关心的是最大的前几个,比如销售最好的几个产品,几个店,等。之前讲到的head(), 能够看到看到DF里面的前几行,如果需要看到最大或者最小的几行就需要先进行排序。max()和min()可以看到最大或者最小值,但是只能看到一个值。
nlargest()的优点就是能一次看到最大的几行,而且不需要排序。缺点就是只能看到最大的几个,看不到最小的。
【9】get
python字典的get()函数用于返回指定键的值,如果值不在字典中返回默认值。
dict = {'Name': 'Xiaoxiao', 'Age': 38, 'School': 'Hrbeu'} print (dict.get('School')) print (dict.get('Sex', "Nothing")) ''' Hrbeu Nothing '''