Dictionary的排序问题

字典数据类型中没有元素顺序的概念,但是依然可以实现按照一定的次序来存取字典中的元素(Key-Value对),在《Dive into Python中》没有详细的说明,给出了相应文章的链接,找了过去,觉着应该会有用。

VIA "To sort a dictionary"<<ActiveState Code

Dictionary数据类型不能被排序,没有相应的映射。所以如果要是想给一个dictionary排序的话,毫无疑问,只能通过排列它的键值(在一个单独的list中)来达到目的。Sorting(key,value) pairs(items)是最简单的,但不快。

# (IMHO) the simplest approach:
def sortedDictValues1(adict):
    items = adict.items()
    items.sort()
    return [value for key, value in items]

# an alternative implementation, which
# happens to run a bit faster for large
# dictionaries on my machine:
def sortedDictValues2(adict):
    keys = adict.keys()
    keys.sort()
    return [dict[key] for key in keys]

# a further slight speed-up on my box
# is to map a bound-method:
def sortedDictValues3(adict):
    keys = adict.keys()
    keys.sort()
    return map(adict.get, keys)

排序的概念只适用于有序列的集合,一个映射(如字典类型)是没有顺序的,所以它不能被排序。然后,字典数据中的键值可以提取到一个list中去,list数据。上面的例子中返回的是按键值的排序,这个是最常见的需要,并且解决了用户的疑惑“我该怎样来给字典类型的数据排序呢” 🙂

这些方式都很有趣。我们需要通过键名排列key-value对,然后返回键值的列表,第一个例子思路看上去很清晰(概念上的简单):.items, .sort, 然后用一个列表来拣出键值就可以了。

然而(至少在我的机器上)它的速度并不怎样,只提取Key,排序,然后在字典中为每个键名返回键值,这个是第二种方法,要快一点。

Advertisements
此条目发表在Python分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s