Python 字典的使用

字典:

#可以用大括号创建字典,也可以用工厂函数创建;
cleese={} 
palin=dict()

#给字典加入一些数据
cleese[‘Name‘] = ‘John Cleese‘
cleese[‘Occupations‘] = [‘actor‘,‘comedian‘,‘writer‘,]

#查看里面有哪些数据项
In [9]: cleese
Out[9]: {‘Name‘: ‘John Cleese‘, ‘Occupations‘: [‘actor‘, ‘comedian‘, ‘writer‘]}

palin = {‘Name‘:‘Michael Palin‘,‘Occupations‘:[‘comedian‘,‘actor‘,‘writer‘,‘tv‘]}

In [11]: palin
Out[11]: {‘Name‘: ‘Michael Palin‘, ‘Occupations‘: [‘comedian‘, ‘actor‘, ‘writer‘, ‘tv‘]}

#可以通过键来调用对应的数据
In [13]: palin[‘Name‘]
Out[13]: ‘Michael Palin‘

#如果字典中一个键对应着多个数据项,也可以使用类似列表的记号访问。
In [15]: palin[‘Occupations‘][-1]
Out[15]: ‘tv‘

In [16]: palin[‘Occupations‘][1]
Out[16]: ‘actor‘

In [17]: palin[‘Occupations‘][0]
Out[17]: ‘comedian‘

一、对以下数据做处理,输出保留人名和比赛数据排序后的前三项。

Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-25,2:54,2.18,2:55,2:55

第一版代码:

#!/usr/local/python3/bin/python3
def sanitize(time_string):
    if ‘-‘ in time_string:
        splitter=‘-‘
    elif ‘:‘ in time_string:
        splitter=‘:‘
    else:
        return(time_string)
    (mins,secs) = time_string.split(splitter)
    return(mins + ‘.‘ + secs)

def get_file_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        return(data.strip().split(‘,‘))
    except IOError as ioerr:
        print(‘File error‘ + str(ioerr))
        return(None)

sarah1 = get_file_data(‘sarah2‘)
#这里是将列表中前两项数据,人名和生日使用pop弹出到sarah_name,sarah_dob两个变量中。
(sarah_name,sarah_dob) = sarah1.pop(0),sarah1.pop(0)
#这里要做字符串拼接,所以后面的序列处理完之后,需要使用str()转换成字符串。
print(sarah_name + "‘s fastest times are:" + str(sorted(set([ sanitize(i) for i in sarah1 ]))[0:3]))

输出结果:

Sarah Sweeney‘s fastest times are:[‘2.18‘, ‘2.25‘, ‘2.39‘]

二、上面定义的函数不变,我们使用字典的方式来完成

第二版代码:

#!/usr/local/python3/bin/python3
def sanitize(time_string):
    if ‘-‘ in time_string:
        splitter=‘-‘
    elif ‘:‘ in time_string:
        splitter=‘:‘
    else:
        return(time_string)
    (mins,secs) = time_string.split(splitter)
    return(mins + ‘.‘ + secs)

def get_file_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        return(data.strip().split(‘,‘))
    except IOError as ioerr:
        print(‘File error‘ + str(ioerr))
        return(None)

sarah1 = get_file_data(‘sarah2‘)
#定义字典
sarah_dic=dict()
#将列表中前两个数据项,弹出保存到字典对应的键上。
sarah_dic[‘name‘] = sarah1.pop(0)
sarah_dic[‘dob‘] = sarah1.pop(0)
#姓名和日期都弹出了,sarah1里面剩下的就是时间数据了,保存在sarah_dic字典中,键为time;
sarah_dic[‘time‘] = sarah1
print(sarah_dic[‘name‘] + "‘s fastest time are: " + str(sorted(set([sanitize(i) for i in sarah1]))[0:3]))

输出结果与上面相同

三、把字典的创建移到get_file_data() 函数中,返回一个字典而不是列表。 并且把数据切片,去重复项,排序也移到get_file_data函数中,调用函数完成4个选手的成绩输出。

第三版代码:

#!/usr/local/python3/bin/python3
def sanitize(time_string):
    if ‘-‘ in time_string:
        splitter=‘-‘
    elif ‘:‘ in time_string:
        splitter=‘:‘
    else:
        return(time_string)
    (mins,secs) = time_string.split(splitter)
    return(mins + ‘.‘ + secs)

def get_file_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(‘,‘)
        return({‘name‘:templ.pop(0),
                ‘dob‘:templ.pop(0),
                ‘time‘:str(sorted(set([sanitize(i) for i in templ]))[0:3])})
    except IOError as ioerr:
        print(‘File error‘ + str(ioerr))
        return(None)

james1 = get_file_data(‘james2‘)
julie1 = get_file_data(‘julie2‘)
mikey1 = get_file_data(‘mikey2‘)
sarah1 = get_file_data(‘sarah2‘)

print(james1[‘name‘] + "‘s fastest time are: " + james1[‘time‘])
print(julie1[‘name‘] + "‘s fastest time are: " + julie1[‘time‘])
print(mikey1[‘name‘] + "‘s fastest time are: " + mikey1[‘time‘])
print(sarah1[‘name‘] + "‘s fastest time are: " + sarah1[‘time‘])

输出结果:

难点:

def get_file_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(‘,‘)
#可以看到这里是返回字典了,发现连字典名都没有,直接返回的是键和对应的数据。        
        return({‘name‘:templ.pop(0),
                ‘dob‘:templ.pop(0),
                ‘time‘:str(sorted(set([sanitize(i) for i in templ]))[0:3])})
    except IOError as ioerr:
        print(‘File error‘ + str(ioerr))
        return(None)
        
#由于返回过来的直接是字典数据,这里用任何的变量调函数,都会变成字典,而函数返回键值对应的数据就保存在该字典中。
james1 = get_file_data(‘james2‘)    

#这里就可以使用字典和键"james1[‘name‘]"来输出数据了。
print(james1[‘name‘] + "‘s fastest time are: " + james1[‘time‘])
时间: 2024-10-20 02:33:29

Python 字典的使用的相关文章

python 字典有序无序及查找效率,hash表

刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的.后来接触到了字典查找效率这个东西,查了一下,原来字典在python内部是通过哈希表的顺序来排的,做了一些测试,比如di = {1:1,3:3,2:2,4:4,5:5} ,无论怎么改变键值对的顺序,print di 总是会{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}.所以看起来当插入di['key']='value'时,这组键值对有时

Python 字典(Dictionary) get()方法

描述 Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法: dict.get(key, default=None) 参数 key -- 字典中要查找的键. default -- 如果指定键的值不存在时,返回该默认值值. 返回值 返回指定键的值,如果值不在字典中返回默认值None. 实例 以下实例展示了 get()函数的使用方法: #!/usr/bin/python dict = {'Name': 'Zara', 'A

Python字典高级使用方法汇总

Python字典高级使用方法汇总 字典(dictionary)是python中的一种非常灵活和强大的数据结构,可以完成很多操作.本文总结了一些除了基本的初始化.赋值.取值之外的常用的字典使用方法. 字典基础参考: [1]:http://www.w3cschool.cc/python/python-dictionary.html [2]:http://www.111cn.net/phper/python/56355.htm [3]:http://skyfen.iteye.com/blog/5675

python字典介绍

Python  字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: d = {key1 : value1, key2 : value2 } 键必须是唯一的,但值则不必. 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组. 一个简单的字典实例: dict = {'Alice': '2341', 'Beth': '9102'

Python 字典(Dictionary) setdefault()方法

描述 Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值. 语法 setdefault()方法语法: dict.setdefault(key, default=None) 参数 key -- 查找的键值. default -- 键不存在时,设置的默认键值;存在则不设置. 返回值 该方法没有任何返回值. 实例 以下实例展示了 setdefault()函数的使用方法: #!/usr/bin/pytho

Python字典增删操作技巧简述

Python编程语言是一款比较容易学习的计算机通用型语言.对于初学者来说,首先需要掌握的就是其中的一些基础应用.比如今天我们为大家介绍的Python字典的相关操作,就是我们在学习过程中需要熟练掌握的技巧. Python字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何Python数据类型. 1.新建Python字典 >>> dict = {} #新建一个空字典 >>>

Python字典方法copy()和deepcopy()的区别

1 from copy import deepcopy # import deepcopy模块 2 d = {} 3 d['name'] = ['black', 'guts'] # d = {'name': ['black', 'guts']} 4 c = d.copy() # c = {'name': ['black', 'guts']} 5 dc = deepcopy(d) # dc = {'name': ['black', 'guts']} 6 d['name'].append('whit

<转>python字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

python 字典排序 关于sort()、reversed()、sorted()

一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a','have','I'])) #['I', 'have', 'a', 'dream'] 2.让人糊涂的sort()与sorted() 在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort(). sorted() sorted(iterable[,

Python字典和集合

1. 字典字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.可哈希表示key必须是不可变类型,如:数字.字符串.只含不可变类型元素的元组(1,2,3,'abc').实现__hash__()方法的自定义对象(因为__hash__()须返回一个整数,否则会出现异常:TypeError: an integer is required).可以用ha