0

我有以下函数,它接受一个字典,对其进行排序并返回字典值列表。

def sort_dict_values(dic):
keys = dic.keys()
keys.sort()
return map(dic.get, keys)

dict1 = {"b":"1", "a":"2", "d":"", "c":"3"}
sorted_list = sort_dict_values(dict1)

此函数返回一个列表,其中包含具有空值的项目。例如,结果列表将是:

["2","1","3",""]

我想丢弃没有价值的物品。例如丢弃“d”,因为它是空的。结果列表应如下所示:

["2","1","3"]
4

4 回答 4

4
>>> dict1 = {"b":"1", "a":"2", "d":"", "c":"3"}
>>> [v for k, v in sorted(dict1.items()) if v]
['2', '1', '3']

正如@AlexChamberlain 在评论中所说,它将通过首先执行 O(N) 过滤器来减少 O(N log N) 排序算法的负载

>>> [v for k, v in sorted(x for x in dict1.items() if x[1])]
['2', '1', '3']
于 2013-06-11T09:30:32.317 回答
2

你可以filter在这里使用:

from itertools import imap
def sort_dict_values(dic):
    keys = dic.keys()
    keys.sort()
    return filter(None,imap(dic.get, keys))

dict1 = {"b":"1", "a":"2", "d":"", "c":"3"}
print sort_dict_values(dict1)   
#['2', '1', '3']

或者正如@Alex Chamberlain 所建议的那样,在排序之前最好过滤键,因为这会减少要排序的项目数量:

def sort_dict_values(dic):
    keys = sorted(k for k,v in dic.iteritems() if v !='')
    return map(dic.get, keys)

dict1 = {"b":"1", "a":"2", "d":"", "c":"3"}
print sort_dict_values(dict1) 
#['2', '1', '3']
于 2013-06-11T09:17:39.823 回答
0

简单过滤排序结果

>>> a = ["2","1","3",""]
>>> filter(None, a)
['2', '1', '3']
于 2013-06-11T09:18:27.250 回答
0

一个班轮:

[v for k,v in sorted(zip(d.keys(),d.values())) if v]
于 2013-06-11T09:28:56.543 回答