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()    # 输出所有值

输出结果为:

This is one
This is 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

1. python中排序,函数sort、sorted、argsort,collections.OrderedDict类

2. python字典按照声明的顺序添加

3. python jason

4. Python字典在实际工作中的应用

5. Python 变量类型

你可能感兴趣的:(Pythonj,Database)