添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大鼻子的煎鸡蛋  ·  Jmeter之Bean ...·  1 年前    · 

将列表[11, 22, 33, 44, 55, 66, 77, 88, 99]按大于66的存储在k1里,其余的存储在k2里。

本次的环境是在windows7下,我的python是python3.4.3

也是接触python开始最先想到的,中规中矩的做法

# -*- encoding = utf-8 -*-
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictSort():
	dic = dict()
	# loop
	for value in all_items:
		if value > 66:
			if "k1" in dic.keys():
				dic["k1"].append(value)
			else:
				dic["k1"] = [value]
		else:
			if "k2" in dic.keys():
				dic["k2"].append(value)
			else:
				dic["k2"] = [value]
	print(dic)
if __name__ == '__main__':
	dictSort()
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]}

第一次写好代码后,调试发现有问题,

dic["k2"] = value

写成了这样,而实际dic["key"]是一个list,赋值方式不对导致出错了。

借助setdefault()

# -*- encoding = utf-8 -*-
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictSortBysetdefault():
	dic = dict()
	# loop list
	for value in all_items:
		if value >66:
			dic.setdefault("k1", []).append(value)
		else:
			dic.setdefault("k2", []).append(value)
	print(dic)
if __name__ == '__main__':
	dictSortBysetdefault()
{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]}

方法2调试时,根据setdefault的API说明,D.setdefault(k[,]),看这写法以为[]是可以省略的,就写成了

dic.setdefault("k1").append(value)

结果出错了。

使用collections.defaultdict().

# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def defDictSort():
	dic = collections.defaultdict(list)
	# loop list
	for value in all_items:
		if value >66:
			dic["k1"].append(value)
		else:
			dic["k2"].append(value)
	print(dic)
if __name__ == '__main__':
	defDictSort()
defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]})

定义字典变量的时候,原来还要指定values的属性,最开始写成了下面这样

dic = collections.defaultdict()

使用D.fromkeys()生成一个“默认”的字典。然后根据条件再去追加values.

# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictByFromKeys():
    dic = {}.fromkeys(("k1", "k2"))
    # get values by loop list
    for value in all_items:
        if value > 66:
            if dic["k1"] is None:
                dic["k1"] = [value]
            else:
                dic["k1"].append(value)
        else:
            if dic["k2"] is None:
                dic["k2"] = [value]
            else:
                dic["k2"].append(value)
    print(dic)
if __name__ == '__main__':
	dictByFromKeys()

结果输出如下所示:
{'k1': [77, 88, 99], 'k2': [11, 22, 33, 44, 55, 66]}

代码写完调试的时候,fromkeys()默认的value是None,上来拿到list的元素后就直接判断append了,导致报错:NoneType 没有append属性。

然后间接转换了一下,先去判断是否为None,如果是就直接赋值,如果不是,那证明已经有数据加入了,然后再使用append方法就没问题了。

借助defaultdict跟set,但缺点是,values是无序的。

# -*- encoding = utf-8 -*-
import collections
all_items = [11, 22, 33, 44, 55, 66, 77, 88, 99]
def dictBySet():
	dic = collections.defaultdict(set)
	# loop list
	for value in all_items:
		if value > 66:
			dic["k1"].add(value)
		else:
			dic["k2"].add(value)
	print(dic)
if __name__ == '__main__':
	dictBySet()

输出结果:
defaultdict(<class 'set'>, {'k1': {88, 99, 77}, 'k2': {33, 66, 11, 44, 22, 55}})

--- over ---

背景为了举一反三,多种方式尝试解决问题。问题将列表[11, 22, 33, 44, 55, 66, 77, 88, 99]按大于66的存储在k1里,其余的存储在k2里。本次的环境是在windows7下,我的python是python3.4.3方法1:也是接触python开始最先想到的,中规中矩的做法# -*- encoding = utf-8 -*- 例如 d1 = {a:1, b:2} d2 = {a:11, b:22, c:3} #目标:new_d(或者是d1) =d1 + d2 = {a:[1 , 11], b:[2, 22], c:[3]} 或者:new_d = { 1: {a:1, b:2}, 2:{a:11, b:22, c:3} } Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 引入:假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list。给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。 names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 如果这时候用dic #打开excel文件1 workbook = xlrd.open_workbook(r'F:\\python\\test\\bb_6c.xlsx') sheet = workbook.sheet_by_index(0) rows = [sheet.row_valu
使用dict.setdefault()可设置一个默认值,如果key已存在,就不会有其他操作,借此我们可以不用在追加数据时判断key的存在: my_dict = {} # 建立一个空字典 my_dict.setdefault("key", []) # 设置默认键 print("a" in my_dict['key']) # 判断值是否存在 my_dict.setdefault("key", []).append("a") # 添加进去值 print("a" in my_dict['key']) # 判断值是否
一 字典dict1.定义使用键-值(key-value)存储,根据key算出value的存放位置(哈希函数),具有极快的查找速度。dict内部存放的顺序和key放入的顺序无关,并且dict的key必须是不可变对象。2.存入数据1)初始化时存入>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 952)通过key放入>>>
别处看的,整理下,方便后来人。 出处:http://www.jb51.net/article/34461.htm http://www.linuxzen.com/python-you-ya-de-cao-zuo-zi-dian.html 字典不管在那种语言中总是受人追捧的,可以帮助解决很多问题。这里对python中字典的基础操作做一总结,权当入门: Python 中的字典是...