Python中很长用的数据结构是dict,在使用的过程中总会遇到这样的问题:你想有序的遍历一个dict
需求一,无序遍历dict中的内容,实现方式如下:
1
#
!/
usr
/
local
/
bin
/
python
2![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
MAP_TEST
=
{
3
' a ' : ' aa ' ,
4
' b ' : ' bb ' ,
5
' c ' : ' cc ' ,
6
' d ' : ' dd ' ,
7
}
8
def main():
9
for
i in MAP_TEST.keys():
10
print i
+
"
:
"
+
MAP_TEST[i]
11![None.gif](/Images/OutliningIndicators/None.gif)
12
if
__name__
==
'
__main__
'
:
13
main()
14
![None.gif](/Images/OutliningIndicators/None.gif)
2
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](/Images/dot.gif)
3
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
4
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
5
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
6
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
7
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![None.gif](/Images/OutliningIndicators/None.gif)
13
![None.gif](/Images/OutliningIndicators/None.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
需求二,有序遍历dict中的内容,但dict是无序的,所以要实现只能用list过渡
1
#
!/
usr
/
local
/
bin
/
python
2![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
MAP_TEST
=
{
3
' a ' : ' aa ' ,
4
' b ' : ' bb ' ,
5
' c ' : ' cc ' ,
6
' d ' : ' dd ' ,
7
}
8
def main():
9
items
=
MAP_TEST.keys()
10
items.sort();
11
for
i in items:
12
print i
+
"
:
"
+
MAP_TEST[i]
13![None.gif](/Images/OutliningIndicators/None.gif)
14
if
__name__
==
'
__main__
'
:
15
main()
16
17![None.gif](/Images/OutliningIndicators/None.gif)
18
![None.gif](/Images/OutliningIndicators/None.gif)
2
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](/Images/dot.gif)
3
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
4
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
5
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
6
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
7
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![None.gif](/Images/OutliningIndicators/None.gif)
13
![None.gif](/Images/OutliningIndicators/None.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
15
![None.gif](/Images/OutliningIndicators/None.gif)
16
![None.gif](/Images/OutliningIndicators/None.gif)
17
![None.gif](/Images/OutliningIndicators/None.gif)
18
![None.gif](/Images/OutliningIndicators/None.gif)
需求三,按照自定义的顺序排列,实现如下,在sortfunc中实现你自己的排序方法
本例实现了倒序排列
1
#
!/
usr
/
local
/
bin
/
python
2![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
MAP_TEST
=
{
3
' a ' : ' aa ' ,
4
' b ' : ' bb ' ,
5
' c ' : ' cc ' ,
6
' d ' : ' dd ' ,
7
}
8
def sortfunc(x,y):
9
return
cmp(y,x);
10
11
def main():
12
items
=
MAP_TEST.keys()
13
items.sort(sortfunc);
14
for
i in items:
15
print i
+
"
:
"
+
MAP_TEST[i]
16![None.gif](/Images/OutliningIndicators/None.gif)
17
if
__name__
==
'
__main__
'
:
18
main()
19![None.gif](/Images/OutliningIndicators/None.gif)
20
![None.gif](/Images/OutliningIndicators/None.gif)
2
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](/Images/OutliningIndicators/ContractedBlock.gif)
![dot.gif](/Images/dot.gif)
3
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
4
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
5
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
6
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
7
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![None.gif](/Images/OutliningIndicators/None.gif)
13
![None.gif](/Images/OutliningIndicators/None.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
15
![None.gif](/Images/OutliningIndicators/None.gif)
16
![None.gif](/Images/OutliningIndicators/None.gif)
17
![None.gif](/Images/OutliningIndicators/None.gif)
18
![None.gif](/Images/OutliningIndicators/None.gif)
19
![None.gif](/Images/OutliningIndicators/None.gif)
20
![None.gif](/Images/OutliningIndicators/None.gif)
说明:
在不通过版本的python中dict的默认顺序是不同的,编码时,特别是修改或者二次开发的时候,
应注意这个情况。可能会造成bug
例如一下四个字段,在1.5 2.2.3 2.4.3中排序不同,分别如下
1.5:
edifact
flat-encoded
vessel
flat-decoded
2.2.3:
flat-decoded
vessel
flat-encoded
edifact
Python 2.4.3
edifact
flat-decoded
flat-encoded
vessel