python字典获取关联值_【Python实战12】使用字典关联数据

现在我的手里有了新的一组数据,数据内容如下:

james.txt:

James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16julie.txt:Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01,3.02,2:59mikey.txt:Mikey McManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38,2:40,2.22,2-31sarah.txt:Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22我们可以看到数据格式为姓名,出生年月和一系列的时间列表,现在希望的是打印每个文件中的人的姓名、出生年月和最快的三个时间。现在我们先编写一段简单的代码来实现这个功能,代码如下:"""转换时间格式"""

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_coach_data(filename):

try:

with open(filename) as file:

data = file.readline()

return(data.strip().split(‘,‘))

except IOError as error:

print(‘File Error:‘+str(error))

return(None)

"""读取sarah.txt的内容"""

sarah = get_coach_data(‘sarah.txt‘)

"取出姓名和生日"

(sarah_name,sarah_birthday) = sarah.pop(0),sarah.pop(0)

"""打印姓名、生日和最快的三个时间"""

print(sarah_name+"的生日是:"+sarah_birthday+",最快的三个时间是:"+str(sorted(set([sanitize(t) for t in sarah]))[0:3]))这段代码非常的简单,只是将前两篇文章中的内容整合到了一起,如果不是很熟悉的话可以参看【python实战】的前面两篇文章。运行效果如下:>>> ================================ RESTART ================================

>>>

Sarah Sweeney的生日是:2002-6-17,最快的三个时间是:[‘2.18‘, ‘2.21‘, ‘2.22‘]这里我们只是通过自己编码实现了我们想要的功能,但是我们回过头看下我们编写的代码,可以看到,代码似乎有些不太合理,我们只是读取sarah的内容就定义了三个变量,如果再加上其他三个人的话就有12个变量了,如果要是有40、400、4000个人呢?所以这里我们就要使用一个数据字典的功能。

关于数据字典我们下面举几个例子,如下:

1、创建两个字典,一个用大括号创建,另一个用工厂创建

>>> clesse={}

>>> palin=dict()

>>>

>>> type(clesse)

>>> type(palin)

2、通过键值关联,分别向这两个字典中增加一些数据

>>> clesse[‘name‘] = ‘zhangsan‘

>>> clesse[‘birthday‘] = ‘2002-06-12‘

>>> palin = {‘name‘:‘wangwu‘,‘occupations‘:[‘comedian‘,‘actor‘,‘writer‘,‘tv‘]}3、键与值关联之后,我们就可以通过键进行值的调用了,如下:

>>> clesse[‘name‘]

‘zhangsan‘

>>> palin[‘occupations‘][-1]

‘tv‘4、可以显示字典全部内容:

>>> clesse

{‘name‘: ‘zhangsan‘, ‘birthday‘: ‘2002-06-12‘}

>>> palin

{‘occupations‘: [‘comedian‘, ‘actor‘, ‘writer‘, ‘tv‘], ‘name‘: ‘wangwu‘}通过上面的例子,我们可以了解到数据字典其实就是键值的对应,了解了数据字典之后,我们能不能使用数据字典来修改之前的代码呢?先让我们来尝试一下吧:"""转换时间格式"""

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_coach_data(filename):

try:

with open(filename) as file:

data = file.readline()

return(data.strip().split(‘,‘))

except IOError as error:

print(‘File Error:‘+str(error))

return(None)

"""读取sarah.txt的内容"""

sarah = get_coach_data(‘sarah.txt‘)

"定义sarah数据字典"

sarah_data={}

"向sarah数据字典中存入内容"

sarah_data[‘name‘]=sarah.pop(0)

sarah_data[‘birthday‘]=sarah.pop(0)

sarah_data[‘time‘]=sarah

"""打印姓名、生日和最快的三个时间"""

print(sarah_data[‘name‘]+"的生日是:"+sarah_data[‘birthday‘]+",最快的三个时间是:"+str(sorted(set([sanitize(t) for t in sarah_data[‘time‘]]))[0:3]))我们修改原先的代码,将之前的变量定义转换成了现在的数据字典,通过数据字典进行数据的操作,现在我们运行,查看结果:

>>> ================================ RESTART ================================

>>>

Sarah Sweeney的生日是:2002-6-17,最快的三个时间是:[‘2.18‘, ‘2.21‘, ‘2.22‘]结果和之前也是一样的,现在我们继续修改代码,以适应多个文件的读取和内容的操作,代码如下:"""转换时间格式"""

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_coach_data(filename):

try:

with open(filename) as file:

data = file.readline()

temp=data.strip().split(‘,‘)

return({‘name‘:temp.pop(0),‘birthday‘:temp.pop(0),‘time‘:str(sorted(set([sanitize(t) for t in temp]))[0:3])})

except IOError as error:

print(‘File Error:‘+str(error))

return(None)

"""读取文件的内容"""

james = get_coach_data(‘james.txt‘)

julie = get_coach_data(‘julie.txt‘)

mikey = get_coach_data(‘mikey.txt‘)

sarah = get_coach_data(‘sarah.txt‘)

"""打印姓名、生日和最快的三个时间"""

print(james[‘name‘]+"的生日是:"+james[‘birthday‘]+",最快的三个时间是:"+james[‘time‘])

print(julie[‘name‘]+"的生日是:"+julie[‘birthday‘]+",最快的三个时间是:"+julie[‘time‘])

print(mikey[‘name‘]+"的生日是:"+mikey[‘birthday‘]+",最快的三个时间是:"+mikey[‘time‘])

print(sarah[‘name‘]+"的生日是:"+sarah[‘birthday‘]+",最快的三个时间是:"+sarah[‘time‘])这里我们修改了get_coach_data函数,让其直接返回一个数据字典,这样就会很方便了,运行结果如下:

>>> ================================ RESTART ================================

>>>

James Lee的生日是:2002-3-14,最快的三个时间是:[‘2.01‘, ‘2.16‘, ‘2.22‘]

Julie Jones的生日是:2002-8-17,最快的三个时间是:[‘2.11‘, ‘2.23‘, ‘2.59‘]

Mikey McManus的生日是:2002-2-24,最快的三个时间是:[‘2.22‘, ‘2.31‘, ‘2.38‘]

Sarah Sweeney的生日是:2002-6-17,最快的三个时间是:[‘2.18‘, ‘2.21‘, ‘2.22‘]很好,我们成功的完成了我们想要的功能。

原文:http://blog.csdn.net/wukongcode/article/details/19307635

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sending HTML content in an email using PHP

转载链接&#xff1a;http://code.web-max.ca/misc_htmlemail.php 发送一个HTML格式的电子邮件&#xff0c;主要在邮件的头信息中定义邮件正文的类型&#xff1a; Content-Type:text/html;charset"utf-8"。 示例&#xff1a; <?php// Example $HTML …

Realtime Ray Tracing RenderMan Point Cloud

这里演示的是演示的是光线与包围盒测试。在装备Winfast 8800GT 512M的台式机上可以进行每秒4.6亿次点到射线的距离计算计算&#xff0c;用于判断点是否真正的与射线相交。外部数据的填充与准备延迟依旧是GPGPU应用的一个巨大门槛。白色是命中的包围盒&#xff0c;绿色的就是射线…

SharePoint文档上传管理

前台代码: <% Control Language"C#" AutoEventWireup"true" CodeBehind"FileUpload.ascx.cs" Inherits"UploadFile.FileUpload" %><table><tr><td style"width:138px; height: 24px;">请选择列表:…

如何制定有价值的目标

写于2017年07月09日23:29现在修改发布到公众号声明原创公司会制定一系列目标&#xff0c;个人也可以制定一些目标&#xff0c;有利于自我学习成长。那么看我这篇文章可以告诉你如何制定有价值的目标。会制定有价值的目标&#xff0c;绝对超越很多人。SMART原则王健林之前说定个…

清除dns缓存命令行_怎么防止移动dns劫持,防止移动dns劫持要先了解什么是dns劫持...

本人以网络技术出身&#xff0c;近两年接触CDN网络&#xff0c;处理了一些CDN方面的网络问题&#xff0c;大多数以运营商丢包&#xff0c;延迟抖动为主&#xff0c;也处理一些硬件故障&#xff0c;比如机械硬盘的读写io测试&#xff0c;内存条兼容性测试&#xff0c;服务器IPMI…

php 修改上传文件大小 (max_execution_time post_max_size)

转载链接&#xff1a;http://hi.baidu.com/ttl289/item/683c8223a54c6d0f76272cd7 有些朋友要通过自己的网站后台&#xff0c;包括论坛&#xff0c;来上传一些文件&#xff0c;php一般为2m&#xff0c;或8m&#xff08;以下我们按默认为2m&#xff09;&#xff0c;接下来就是来…

移动硬盘格式化(pc和mac共用)-菜鸟级解决方案[转]

用pc的时候买了一个320G的移动硬盘&#xff0c;从来没考虑过什么格式化的问题&#xff0c;插上就用了。 后来接触mac才发现pc和mac在移动存储设备的格式化上还是有不少冲突的。如果你的移动硬盘mac上不能修改&#xff0c;或者pc上找不到&#xff0c;那就尽情得批判万恶的资本主…

【php】php的ssh2扩展的安装

ssh2(secure shell2)&#xff0c;对于远端主机提供高安全性的资料传输工作。安装&#xff1a;1、首先要装OpenSSL。 2、要安装 libssh2../configure && make all install3、再然后&#xff0c;安装PECL/ssh2可以使用 pear install ssh2安装&#xff08;有的说是 pear i…

回答知乎问题:你写过什么自认为惊艳的诗?

首次整理于 2019-07-27 22:04:00&#xff0c;现在整理发布在公众号申明原创。整理了一下大学期间2012年&#xff5e;2016年发布在QQ空间&#xff0c;自己感觉写得还行的七首“诗词”。回答知乎问题&#xff1a;你写过什么自认为惊艳的诗&#xff1f;中国古诗词博大精深。小时候…

lighttpd安装配置支持php

转载链接&#xff1a;https://wiki.freebsdchina.org/howto/n/php_fastcgi_lighttpd 安装lighttpd 记得在SPAWNFCGI前打勾 [X] SPAWNFCGI Depend on spawn-fcgi utility #cd /usr/ports/www/lighttpd #make config #make install clean 安装php 模块自己看自己需要 #cd /usr/p…

密码可逆不可逆选择_膝关节损伤不可逆!跑步要注意!

膝盖同时也是运动者最常受伤的关节。根据美国运动医学整型外科协会的报告&#xff0c;美国每年约有三百万人拉伤、挫伤、或扭伤他们的膝部&#xff0c;其中约有一半是因为运动引起的。而对于跑者而言&#xff0c;影响最大的就是我们的膝关节。换言之&#xff0c;长跑的潜在危害…

MS CRM 2011 C#中获取Web Resource

原创地址&#xff1a;http://www.cnblogs.com/jfzhu/archive/2013/02/15/2913077.html 转载请注明出处 我在以前的文章中讲过如何用JScript读取web resource资源&#xff0c;我在本文中将要讲解如何在C#中获取web resource资源。 有时候可能有这样的需求&#xff0c;你需要在一…

测试驱动开发

测试驱动开发: 测试驱动开发&#xff08;Test Driven Development,英文缩写TDD&#xff09;是极限编程的一个重要组成部分&#xff0c;它的基本思想就是在开发功能代码之前&#xff0c;先编写测试代码。也就是说在明确要开发某个功能后&#xff0c;首先思考如何对这个功能进行测…

面试官问:能否模拟实现JS的call和apply方法

写于2018年11月30日&#xff0c;发布在掘金上阅读量近一万&#xff0c;现在发布到微信公众号申明原创。相对比较基础的知识&#xff0c;虽然日常开发可能用得比较少&#xff0c;各种源码中有很多call和apply&#xff0c;需要掌握。前言这是面试官问系列的第三篇&#xff0c;旨在…

HTML中小meta的大作用

转载链接&#xff1a;http://www.pconline.com.cn/pcedu/sj/wz/html/0401/293106.html meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中&#xff0c;meta 标签的用处很多。meta 的属性有两种&#xff1a;name和http-equiv。…

prometheus 发送恢复 值_Prometheus基础知识介绍

【编者的话】本文会让你了解Prometheus是什么&#xff0c;并让你理解它在监控领域的适用场景。Prometheus起源很久以前&#xff0c;加利福尼亚州山景城有一家名为Google的公司。他们推出了大量产品&#xff0c;其中最著名的是广告系统和搜索引擎平台。为了运行这些不同的产品&a…

FAT32格式和NTFS有什么区别

FAT32与NTFS的区别在推出FAT32文件系统之前&#xff0c;通常PC机使用的文件系统是FAT16。像基于MS-DOS&#xff0c;Win 95等系统都采用了FAT16文件系统。在Win 9X下&#xff0c;FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小&a…

修复系统COM+

有的时候由于安装COM&#xff0b;过程中出错&#xff0c;可能会造成不能再次展开COM&#xff0b;浏览器的〔我的电脑〕。解决办法&#xff1a;1 删除注册表键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM32 运行appwiz.cpl&#xff0c;打开系统的[添加\删除]窗体&#xff0c;点击…

面试官问:JS的this指向

写于2018年12月25日&#xff0c;发布在掘金上阅读量近一万&#xff0c;现在发布到微信公众号申明原创。前言这是面试官问系列的第四篇&#xff0c;旨在帮助读者提升JS基础知识&#xff0c;包含new、call、apply、this、继承相关知识。面试官问系列文章如下&#xff1a;感兴趣的…

CSS实现div悬浮框的代码(兼容IE6)

转载链接&#xff1a;http://hi.baidu.com/grayworm/item/b735c2061f4e33ea34990265 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://ww…