python
dict D={}
list L=[]
tuple P=()
http://ipseek.blog.51cto.com/1041109/789896
字典嵌套
字典是可以嵌套的,也就是类似php里面的二维数组,也就是活,字典里面能嵌套一个字典。不但可以嵌套字典,还可以嵌套列表或者元组。对于嵌套在字典里面的列表,也可以使用列表对象的方法对该列表进行操作。
元组和列表差不多,但是有两个很不一样的地方,第一个是列表使用[],而元组使用(),然后元组跟字符串类似,是不可改变的。元组是python数据结构里面唯一不能修改的,而列表和字典都是可以修改的。
关于__name == __main
简单讲,py文件单独运行时,默认__name__变量传递为__main__因此走此分支。
而若文件作为module被别人import时,__name__为文件名,不走此分支。
关于setdefault
http://longmans1985.blog.163.com/blog/static/7060547520094623556561/
http://bbs.chinaunix.net/thread-2293439-1-1.html
目标功能:
class Class:
def __init__(self):
self.data = {}
def add_value(self,key,value):
if self.data.has_key(key):
self.data[key].append(value)
else:
self.data[key] = [value]
or this:
class Class:
def __init__(self):
self.data = {}
def add_value(self,key,value):
try:
self.data[key].append(value)
except KeyError:
self.data[key] = [value]
替代功能:
class Class:
def __init__(self):
self.data = {}
def add_value(self,key,value):
self.data.get(key,[]).append(value) not work!!
class Class:
def __init__(self):
self.data = {}
def add_value(self,key,value):
self.data.setdefault(key,[]).append(value) work well
举例:
请问如何将report = {1:{'1-2':[1,2,3],'1-3':[2,3,4]},2:{'2-1':[3,4,5],'2-3':[4,5,6]},3:{'3-1':[3,4,6],'3-2':[5,8,4]}} 这样的数据,转换成report = {1:{'1-2':1,'1-3':2},2:{'2-1':3,'2-3':4},3:{'3-1':3,'3-2':5}}这样的数据,谢谢。
report = {1:{'1-2':[1, 2, 3], '1-3':[2, 3, 4]}, 2:{'2-1':[3, 4, 5], '2-3':[4, 5, 6]}, 3:{'3-1':[3, 4, 6], '3-2':[5, 8, 4]}}
#print report
for key, subdict in report.items() :
#print key
for subkey, lst in subdict.items() :
#print '\t', subkey, lst
subdict[subkey] = lst[0]
print report
举例2:转自:http://blog.youkuaiyun.com/bluewhale1/article/details/8536561
最近拾回Django学习,实例练习中遇到了对多维字典类型数据的遍历操作问题,Google查询没有相关资料…毕竟是新手,到自己动手时发现并非想象中简单,颇有两次曲折才最终实现效果,将过程记录下来希望对大家有用。
Python多维/嵌套字典数据无限遍历
实例数据(多重嵌套):
1 | person = { "male" :{ "name" : "Shawn" }, "female" :{ "name" : "Betty" , "age" : 23 }, "children" :{ "name" :{ "first_name" : "李" , "last_name" :{ "old" : "明明" , "now" : "铭" }}, "age" : 4 }} |
目的:
遍历person中所有嵌套字典类型数据,并以 key : value 的方式显示思路:首先分析数据是否符合字典特征打印该数据的key及对应value循环检查该数据的每一个子value是否符合字典特征,如果符合则迭代执行,不符合则返回循环继续执行至结束
具体代码:
01 | def is_dict(dict_a): #此方法弃用,python已提供数据类型检测方法isinstance() |
04 | except Exception , data: |
08 | def list_all_dict(dict_a): |
09 | if isinstance (dict_a, dict ) : #使用isinstance检测数据类型 |
10 | for x in range ( len (dict_a)): |
11 | temp_key = dict_a.keys()[x] |
12 | temp_value = dict_a[temp_key] |
13 | print "%s : %s" % (temp_key,temp_value) |
14 | list_all_dict(temp_value) #自我调用实现无限遍历 |
结果:
执行 list_all_dict(person),系统回应 :
01 | male : { 'name' : 'Shawn' } |
03 | children : { 'age' : 4 , 'name' : { 'first_name' : '\xc0\xee' , 'last_name' : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' }}} |
05 | name : { 'first_name' : '\xc0\xee' , 'last_name' : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' }} |
07 | last_name : { 'now' : '\xc3\xfa' , 'old' : '\xc3\xf7\xc3\xf7' } |
10 | female : { 'age' : 23 , 'name' : 'Betty' } |