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)]
lambda x:x[1]
, 即以字典的值为索引排序,这里面[]是指第几个元素排列。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}
Reference
1. python中排序,函数sort、sorted、argsort,collections.OrderedDict类
2. python字典按照声明的顺序添加
3. python jason
4. Python字典在实际工作中的应用
5. Python 变量类型