学习python不久,在对列表,字典嵌套操作时,输出结果不对,请各路大神指点迷津??

Python多维/嵌套字典数据无限遍历的实现
投稿:jingxian
字体:[ ] 类型:转载 时间:
下面小编就为大家带来一篇Python多维/嵌套字典数据无限遍历的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
最近拾回Django学习,实例练习中遇到了对多维字典类型数据的遍历操作问题,Google查询没有相关资料…毕竟是新手,到自己动手时发现并非想象中简单,颇有两次曲折才最终实现效果,将过程记录下来希望对大家有用。
实例数据(多重嵌套):
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是否符合字典特征,如果符合则迭代执行,不符合则返回循环继续执行至结束
具体代码:
def is_dict(dict_a): #此方法弃用,python已提供数据类型检测方法isinstance()
dict_a.keys()
except Exception , data:
return False
return True
def list_all_dict(dict_a):
if isinstance(dict_a,dict) : #使用isinstance检测数据类型
for x in range(len(dict_a)):
temp_key = dict_a.keys()[x]
temp_value = dict_a[temp_key]
print"%s : %s" %(temp_key,temp_value)
list_all_dict(temp_value) #自我调用实现无限遍历
执行 list_all_dict(person),系统回应 :
male : {'name': 'Shawn'}
name : Shawn
children : {'age': 4, 'name': {'first_name': '\xc0\xee', 'last_name': {'now':'\xc3\xfa', 'old': '\xc3\xf7\xc3\xf7'}}}
name : {'first_name': '\xc0\xee', 'last_name': {'now': '\xc3\xfa', 'old':'\xc3\xf7\xc3\xf7'}}
first_name : 李
last_name : {'now': '\xc3\xfa', 'old': '\xc3\xf7\xc3\xf7'}
old : 明明
female : {'age': 23, 'name': 'Betty'}
name : Betty
以上这篇Python多维/嵌套字典数据无限遍历的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具5582人阅读
python(12)
遍历person中所有嵌套字典类型数据,并以 key : value 的方式显示思路:首先分析数据是否符合字典特征打印该数据的key及对应value循环检查该数据的每一个子value是否符合字典特征,如果符合则迭代执行,不符合则返回循环继续执行至结束
具体代码:
is_dict(dict_a): #此方法弃用,python已提供数据类型检测方法isinstance()
dict_a.keys()
Exception , data:
list_all_dict(dict_a):
isinstance(dict_a,dict)
: #使用isinstance检测数据类型
range(len(dict_a)):
&&&&&&&&&&&
dict_a.keys()[x]
&&&&&&&&&&&
temp_value
dict_a[temp_key]
&&&&&&&&&&&
%(temp_key,temp_value)
&&&&&&&&&&&
list_all_dict(temp_value)
#自我调用实现无限遍历
执行 list_all_dict(person),系统回应 :
: {'name':
{'first_name':
'\xc0\xee',
'last_name':
{'now':'\xc3\xfa',
'\xc3\xf7\xc3\xf7'}}}
: {'first_name':
'\xc0\xee',
'last_name':
'\xc3\xfa',
'old':'\xc3\xf7\xc3\xf7'}}
first_name
'\xc3\xfa',
'\xc3\xf7\xc3\xf7'}
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37834次
排名:千里之外
原创:20篇
转载:27篇
(2)(15)(16)(3)(3)(2)(1)(4)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'7845人阅读
Python/Tcl(4)
&&&&&&&& python里的字典就像java里的HashMap,以键值对的方式存在并操作,其特点如下
通过键来存取,而非偏移量; 键值对是无序的; 键和值可以是任意对象; 长度可变,任意嵌套; 在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上
&1) 基本操作
python 代码
&&&&table&=&{'abc':1,&'def':2,&'ghi':3} && &&&&table['abc'] && 1 && &&&&len(table) && 3 && &&&&table.keys() && ['abc',&'ghi',&'def'] && &&&&table.values() && [1,&3,&2] && &&&&table.has_key('def') && True&& &&&&table.items() && [('abc',&1),&('ghi',&3),&('def',&2)]&&
2) 修改,删除,添加
python 代码
&&&&table&=&{'abc':1,&'def':2,&'ghi':3} && &&&&table['ghi']&=&('g',&'h',&'i') && &&&&table && {'abc':&1,&'ghi':&('g',&'h',&'i'),&'def':&2} && &&&&del&table['abc'] && &&&&table && {'ghi':&('g',&'h',&'i'),&'def':&2} && &&&&table['xyz']&=&['x',&'y',&'z'] && &&&&table && {'xyz':&['x',&'y',&'z'],&'ghi':&('g',&'h',&'i'),&'def':&2}&&
在这里需要来一句,对于字典的扩充,只需定义一个新的键值对即可,而对于列表,就只能用append方法或分片赋值。
3)对字典的遍历
python 代码
&&&&table&=&{'abc':1,&'def':2,&'ghi':3} && &&&&for&key&in&table.keys(): && &&&&print&key,&'/t',&table[key] && && &&&& && abc&&&&&1 && ghi&&&&&3 && def&&&&&2&&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:424164次
积分:4677
积分:4677
排名:第6412名
原创:67篇
转载:54篇
评论:124条
(1)(1)(1)(4)(1)(1)(3)(1)(2)(2)(3)(1)(1)(5)(1)(1)(1)(2)(1)(3)(1)(2)(2)(5)(2)(2)(1)(2)(2)(3)(1)(1)(1)(2)(1)(1)(1)(2)(3)(3)(2)(2)(1)(3)(2)(4)(1)(11)(4)(3)(3)(6)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 7, 距离下一级还需 193 积分
论坛徽章:0
本帖最后由 bindiry 于
10:59 编辑
问题是这样的,上面的字典,我想在django模版里输入并列出来,在这之前我需要将这个字典排序
排序方式:
第一层的key按字母排序
第二层的key按字母排序
最后还是返回一个完整的嵌套字典
哪位朋友能帮忙解决一下?
最好是经过测试的方法。device_list = {
& & & & & & & & 'BOSS' : {
& & & & & & & & & & & & 'boss_gt8' : { 'name':'Boss GT-8' },
& & & & & & & & & & & & 'boss_gt10' : { 'name':'Boss GT-10' },
& & & & & & & & & & & & 'boss_me20' : { 'name':'Boss ME-20' },
& & & & & & & & & & & & 'boss_me25' : { 'name':'Boss ME-25' },
& & & & & & & & & & & & 'boss_me50' : { 'name':'Boss ME-50' },
& & & & & & & & & & & & 'boss_me70' : { 'name':'Boss ME-70' },
& & & & & & & & },
& & & & & & & & 'Digitech' : {
& & & & & & & & & & & & 'digitech_rp50' : { 'name':'Digitech RP50 & RP80' },
& & & & & & & & & & & & 'digitech_rp70' : { 'name':'Digitech RP70 & RP90' },
& & & & & & & & & & & & 'digitech_rp150' : { 'name':'Digitech RP150' },
& & & & & & & & & & & & 'digitech_rp155' : { 'name':'Digitech RP155' },
& & & & & & & & & & & & 'digitech_rp300a' : { 'name':'Digitech RP300A' },
& & & & & & & & & & & & 'digitech_rp500' : { 'name':'Digitech RP500' },
& & & & & & & & & & & & 'digitech_2120vgs' : { 'name':'Digitech 2120VGS' },
& & & & & & & & },
& & & & & & & & 'Zoom' : {
& & & & & & & & & & & & 'zoom_g1' : { 'name':'Zoom G1 & G1x' },
& & & & & & & & & & & & 'zoom_g1n' : { 'name':'Zoom G1N & G1XN' },
& & & & & & & & & & & & 'zoom_g2nu' : { 'name':'Zoom G2Nu & G2.1Nu' },
& & & & & & & & & & & & 'zoom_g71ut' : { 'name':'Zoom G7.1ut' },
& & & & & & & & & & & & 'zoom_g92tt' : { 'name':'Zoom G9.2tt' },
& & & & & & & & & & & & 'zoom_zfxplugin' : { 'name':'Zoom ZFX plugin' },
& & & & & & & & },
}复制代码
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 3530, 距离下一级还需 1470 积分
论坛徽章:0
是说第一层和第二层吧?最后一层就一个元素,没啥可排序的。for k in sorted(device_list,cmp):
& & print k,sorted(device_list[k],cmp)
& & 复制代码
白手起家, 积分 7, 距离下一级还需 193 积分
论坛徽章:0
谢谢,确实是第二层,是的表达错误
另外我是想在排序后,还保持原结构:一个整体的字典,可以吗?
白手起家, 积分 7, 距离下一级还需 193 积分
论坛徽章:0
我貌似有些理解了,在python里,只要是字典,其items就都是无序的,不能期望返回一个整体有序的字典。。。
看来只能另想他法了。
不知道django有没有在模板里对字典进行排序的方法。。
家境小康, 积分 1367, 距离下一级还需 633 积分
论坛徽章:0
字典本身的无序的,它并不知道你存入的是什么类型的东东。django中模板层只提供一些标签、过滤器的功能。
白手起家, 积分 7, 距离下一级还需 193 积分
论坛徽章:0
本帖最后由 bindiry 于
12:28 编辑
问题总算解决了,我用了django的SortedDict
代码:brands = SortedDict()
& & & & devices = SortedDict()
& & & & i = 0
& & & & for k in sorted(device_list, cmp):
& & & & & & & & j = 0
& & & & & & & & for k2 in sorted(device_list[k], cmp):
& & & & & & & & & & & & devices.insert(j, k2, device_list[k][k2])
& & & & & & & & & & & & j += 1
& & & & & & & & brands.insert(i, k, devices)
& & & & & & & & i += 1
& & & & & & & & devices = SortedDict()复制代码django模版输出后:'BOSS' : {
&&boss_gt10 : { 'name' : 'Boss GT-10' },
&&boss_gt8 : { 'name' : 'Boss GT-8' },
&&boss_me20 : { 'name' : 'Boss ME-20' },
&&boss_me25 : { 'name' : 'Boss ME-25' },
&&boss_me50 : { 'name' : 'Boss ME-50' },
&&boss_me70 : { 'name' : 'Boss ME-70' },
'Digitech' : {
&&digitech_2120vgs : { 'name' : 'Digitech 2120VGS' },
&&digitech_rp150 : { 'name' : 'Digitech RP150' },
&&digitech_rp155 : { 'name' : 'Digitech RP155' },
&&digitech_rp300a : { 'name' : 'Digitech RP300A' },
&&digitech_rp50 : { 'name' : 'Digitech RP50 & RP80' },
&&digitech_rp500 : { 'name' : 'Digitech RP500' },
&&digitech_rp70 : { 'name' : 'Digitech RP70 & RP90' },
'Zoom' : {
&&zoom_g1 : { 'name' : 'Zoom G1 & G1x' },
&&zoom_g1n : { 'name' : 'Zoom G1N & G1XN' },
&&zoom_g2nu : { 'name' : 'Zoom G2Nu & G2.1Nu' },
&&zoom_g71ut : { 'name' : 'Zoom G7.1ut' },
&&zoom_g92tt : { 'name' : 'Zoom G9.2tt' },
&&zoom_zfxplugin : { 'name' : 'Zoom ZFX plugin' },
},&&复制代码对python 列表以及字典排序的问题? - 知乎10被浏览2120分享邀请回答51 条评论分享收藏感谢收起11 条评论分享收藏感谢收起

我要回帖

 

随机推荐