1. 程式人生 > >Python字典-預設儲存結構

Python字典-預設儲存結構

1.1 概念

Python字典是一種相對靈活的儲存方式,其儲存的內容為鍵值(索引和對應的值,key和value用),是無序的。

表現如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
 
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
 
 
print dict['one']          # 輸出鍵為'one' 的值
print dict[2]              # 輸出鍵為 2 的值
print tinydict             # 輸出完整的字典
print tinydict.keys()      # 輸出所有鍵
print tinydict.values()    # 輸出所有值

輸出結果為:

Thisis one
Thisis two
{'dept':'sales','code':6734,'name':'john'}['dept','code','name']['sales',6734,'john']

結論:可以看出該處是按照後進先出的原則來進行輸出的。

1.2 排序

python的型別分為兩類,數值型(包括整型,長整型,浮點型,複數型)和非數值型(字串,列表,元組和字典),對數值型資料用sort,非數值型用sorted。

先舉個例子,當我們要對其值進行排列時可以用到sorted方法。

1)L= [(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)] 
sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函式 
結果:[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)] 
2) sorted(L, key=lambda x:x[1]) # 利用key 
結果:[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)] 
3) students = [(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)] 
sorted(students, key=lambda s: s[2]) # 按年齡排序 
結果:[(‘dave’, ‘B’, 10), (‘jane’, ‘B’, 12), (‘john’, ‘A’, 15)] 
4) sorted(students, key=lambda s: s[2], reverse=True) # 按降序 
[(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)]
  • key是排序的索引,是一種規則,對於字典來說,排序的物件始終是鍵構成的列表,這裡的規則為 lambda x:x[1], 即以字典的值為索引排序,這裡面[]是指第幾個元素排列。
  • reverse意為翻轉,預設此引數為False不翻轉,即reverse=False,那就是正序首個字元ascii(其他語言按首個unicode編碼大小排序,中文無意義啊貌似)由小到大排序,改為True即可由大到小排序了。

再來看一個字典實現:

 import collections  
 d = {'banana': 3, 'apple':4,'pear': 1, 'orange': 2}  
 collections.OrderedDict(sorted(d.items(),key=lambda t: t[1])) 

結果:

OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) 

此處如果單獨用OrderedDict則按照本身輸入順序輸出,既不是倒序也不是按Key值。

也可以依據三方庫jason轉換後排序,但不常用,在Appendix中列出。

1.3 實際應用

1.3.1 應用背景

     在工作中遇到要為現有的資料庫表A新增大量資料,該資料與A表中某類資料相同,但是ID不同,並且同時增加關聯該表的其他表格(B、C表)。

1.3.2 解決方法

解決思路: 通過Python字典型別變數,轉換關聯表中原資料的ID為對應新增資料的ID。首先,根據條件找出A表中要新增的資料,可以下載這些資料到本地(xml檔案或cvs檔案),用Excel開啟,對應這些資料的ID新曾一列資料ID,並把這兩列資料複製到一個文字檔案中。這兩列資料在Python程式中儲存到字典變數中。

其次,根據表之間關聯關係,找出B表中要增加的資料,同樣下載到本地,複製ID到文字檔案中,該ID用於轉換新增ID。

最後,通過下面程式生成對應新增的ID,儲存到檔案中,然後上傳資料到資料庫。

#!/usr/bin/python  
# -*- coding: UTF-8 -*-  
  
dict = {}  
#讀取對應的ID,並存儲為字典型別  
file = open('C:\Users\Administrator\Desktop\idExchange.txt')  
lines = file.readlines()  
for line in lines:  
    #print line  
    #注意ID位置,此處新增ID在前,對應原資料ID在後  
    dict.setdefault(line.split("\t")[1].split("\n")[0],line.split("\t")[0])  
print dict  
  
#讀取要轉換的ID檔案,把轉換後的ID寫入新檔案  
file2 = open('C:\Users\Administrator\Desktop\price.txt')  
lines2 = file2.readlines()  
file3 = open('C:\Users\Administrator\Desktop\priceNj.txt','w')  
#lines3 = file3.readlines()  
for line in lines2:  
    #print dict[line.split('\n')[0]]  
    file3.writelines(dict[line.split('\n')[0]])  
    file3.write('\n')  
print "》》》》寫入完成"  
  
file.close()  
file2.close()  
file3.close()  

Appendix

import collections
dic = collections.OrderedDict()
# dic = dict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print("dic is:",dic.items())

import json
jsons = json.dumps(dic)
print("jsons:",jsons)

結果:

dic is: odict_items([('a', 1), ('b', 2), ('c', 3)])
jsons: {"a": 1, "b": 2, "c": 3}
  • json.dumps(): 對資料進行編碼。    由dict變為object型別。反之也可以轉換回去。

Reference

相關推薦

Python字典-預設儲存結構

1.1 概念Python字典是一種相對靈活的儲存方式,其儲存的內容為鍵值(索引和對應的值,key和value用),是無序的。表現如下:#!/usr/bin/python # -*- coding: UTF-8 -*- dict = {} dict['one'] = "Th

二,影象資料與python儲存結構

# -*- coding: utf-8 -*- """ Created on Sat Nov 17 08:40:21 2018 @author: shenfangyuan """ # -*- coding:utf-8 -*- import tensorflow as tf import nu

Python基礎【資料結構:列表 | 元組 | 集合 | 字典

序列 序列是Python中最基本的資料結構。包括字串,列表,元組,Unicode字串,buffer物件,xrange物件。序列中的每個元素都分配一個數字,即它的索引第一個索引是0,第二個索引是1,依此類推。 列表和元組 列表一個方括號內的逗號分隔值列表中可以存放不同的資料型別。

Python oracle資料庫查詢結果以字典形式儲存,取多條結果記錄數的實現

方法: def executeSQL(self,sql,params): conn = self.connectDB() conn = self.cursor try: self.r = conn.execute(sql,params) s

python設定預設字典(setdefault collections.defaultdict)

setdefault dict.setdefault(key, default=None) 如果鍵不存在於字典中,將會新增新的鍵並將值設為預設值(改變了字典)。如果字典中包含有給定鍵,則返回該鍵對應的值,否則返回為該鍵設定的值。 stu = [('w

Python筆記——基本資料結構:列表、元組及字典

一、列表 一組有序專案的集合。可變的資料型別【可進行增刪改查】 列表是以方括號“[]”包圍的資料集合,不同成員以“,”分隔。 列表中可以包含任何資料型別,也可包含另一個列表 列表可通過序號訪問其中成員 常用列表操作: list.append()追加成員,成員資料 li

python字典結構get()方法的陷阱

字典是python中常用的資料結構,get()方法可用來判斷字典中是否存在對應的key,但是當該key的對應value為0時,使用該方法來判斷key是否存在容易出錯。 get()方法使用如下: mydict.get(1) #假如字典中存在key為1的鍵值

Python 字典儲存無順序 for in 使用要注意

python 字典初始化順序和列印順序不一樣,注意 dict={'size': 7914, 'day': '2012-11-13', 'daytime': '13:59'}; print dict

python將一個txt文件的內容轉為字典格式/將字典格式儲存到txt文件中

# -*- encoding: gbk -*- def load_dict_from_file(filepath): _dict = {} try: with

最新【從零單排】系列流出,教你如何實現字典儲存結構

昨天在星球的【從零單排】系列分享了一篇【字典儲存結構的實現方式】,我覺得這篇文章寫的還是蠻好的,就分享給大家了。 但由於篇幅太長

python字典結構化資料

5.1 字典資料型別 字典的索引可以使用許多不同型別的資料,不只是整數。字典的索引被稱為“鍵”,鍵及其關聯的值稱為“鍵

python 字典深復制和淺復制

python 淺復制 root 進行 deep 打印 use 也會 odin #!/usr/bin/python# -*- coding: UTF-8 -*-import copydict1 = {‘user‘: ‘vickey‘, ‘num‘: [1, 2, 3],‘ag

python基礎一 ------順序結構隊列的python實現

尾插 style 插入 允許 nbsp 隊列 python實現 odin app 隊列:先進先出的線性表(FIFO),只允許在一段插入並在另一端取出 以下是python實現 1 #-*-coding:utf-8-*- 2 #順序存儲隊列的python實現 3 4

Python 字典(Dictionary)

python 字符串 模型 元素 n字典是另一種可變容器模型,且可存儲任意類型對象。字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:d = {key1 : value1, key2 : value2 }

python 字典的函數

pythonclear(),清空註意單純的賦值就相當於c語言中引用,只事額外起了一個別名,所以他們指向相同的地址,所以令c={},只是另外開辟了一個新的空間讓c為空,並沒有改變之前的空間,所以{}與clear()看的功能一樣,其實實現的原理不是一樣的>>> di {1: 11, 2: 22,

python 字典,元組,對象,數組取值方法

color line del 數組 add 數據 span 增加 所有 def create(self,cr,uid,vals,context=None): if context is None: context ={} if vals.get(‘

Python之數據結構:集合

ict 轉換成 創建 可變 discard 重復 如果 upper amp 一、set集合 1、集合是一個無序不重復元素集,有去重的作用 set集合類需要的參數必須是叠代器類型的,如:序列、字典等,然後轉換成無序不重復的元素集。由於集合是不重復的,所以可以對字符串、列表、元

Python - 字典按值(value)排序

key list odi script dcl nes spl ava port 字典安值排序是一個偽命題. 字典本身是不能被排序的, 已經依照關鍵字(key)排序, 可是列表(list)和元組(tuple)能夠排序, 所以字典須要轉換列表後排序.

Python 字典中一鍵對應多個值

列表 檢查 span mark blog class efault remove one #字典的一鍵多值 print‘方案一 list作為dict的值 值允許重復‘ d1={} key=1 value=2 d1.setdefault(key

Python字典

python#!/usr/bin/env python#coding:utf-8info = { ‘name1‘: "jenkins", ‘name2‘: "docker", ‘name3‘: "elk", ‘name4‘: "zabbix"}#增加info["name5"] = "r