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.pswp.cn/news/276484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276484.shtml
英文地址,請注明出處:http://en.pswp.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…