我有有path
和type
的键(类型0 =>文件和类型1 =>目录)初始看起来像这样蟒列表排序多个键
everything = [{u'path': u'/1/', u'type': 1},
{u'path': u'/2/', u'type': 1},
{u'path': u'/3/', u'type': 1},
{u'path': u'/1/something/a.py', u'type': 0},
{u'path': u'/1/something/b.py', u'type': 0},
{u'path': u'/1/something/c.py', u'type': 0},
{u'path': u'/1/foobar/', u'type': 1},
{u'path': u'/2/baz/', u'type': 1},
{u'path': u'/1/something/baz/snap/pop/a.py', u'type': 0},
{u'path': u'/1/something/baz', u'type': 1}]
欲词典列表在path
第一个排序,然后关闭的type
所以我得到这样的
everything = [{u'path': u'/1/', u'type': 1},
{u'path': u'/1/foobar/', u'type': 1},
{u'path': u'/1/something/baz', u'type': 1}, # < --- I want this here
{u'path': u'/1/something/a.py', u'type': 0},
{u'path': u'/1/something/b.py', u'type': 0},
{u'path': u'/1/something/baz/snap/pop/a.py', u'type': 0},
{u'path': u'/1/something/c.py', u'type': 0},
{u'path': u'/2/', u'type': 1},
{u'path': u'/2/baz/', u'type': 1},
{u'path': u'/3/', u'type': 1}]
里的“东西”部分类型开始1
我想,当我做
everything.sort(key=lambda x: (x['path'], x['type']))
我会得到我想要的东西,但我得到
everything = [{u'path': u'/1/', u'type': 1},
{u'path': u'/1/foobar/', u'type': 1},
{u'path': u'/1/something/a.py', u'type': 0},
{u'path': u'/1/something/b.py', u'type': 0},
{u'path': u'/1/something/baz', u'type': 1}, # < --- I don't want this here
{u'path': u'/1/something/baz/snap/pop/a.py', u'type': 0},
{u'path': u'/1/something/c.py', u'type': 0},
{u'path': u'/2/', u'type': 1},
{u'path': u'/2/baz/', u'type': 1},
{u'path': u'/3/', u'type': 1}]
有一种简单的方法来排序,以这种方式everything
还是我写我自己分类?
编辑:
也许这将有助于解释我想要的。
在linux下当你做一个ls -lR
你迪尔斯和文件在其下所列的迪尔斯的一个很好的列表。
谢谢
http://wiki.python.org/moin/HowTo/Sorting/ – 2012-12-29 01:23:19
可能重复[Python多字键排序字典列表](http://stackoverflow.com/questions/1143671/python-sorting- – miku
@miku列表的-字典按多重键),我看到了,但这并不做我想做的事情。这就是我在帖子中关键的那种。 – Jeff