Python 对字典值进行排序并丢弃那些没有值的值

Python 对字典值进行排序并丢弃那些没有值的值,python,dictionary,Python,Dictionary,我有以下函数,它获取一个字典,对它进行排序并返回字典值列表 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) 此函数返回一个列表,其中包含具有空值的项。e、 g.产生的清单将是: ["2","1","3",""]

我有以下函数,它获取一个字典,对它进行排序并返回字典值列表

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)
此函数返回一个列表,其中包含具有空值的项。e、 g.产生的清单将是:

["2","1","3",""]
我想丢弃没有价值的物品。e、 g.丢弃“d”,因为它是空的。结果列表应如下所示:

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

您可以在此处使用
过滤器

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']

您可以在此处使用
过滤器

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']

只需过滤排序结果

>>> a = ["2","1","3",""]
>>> filter(None, a)
['2', '1', '3']

只需过滤排序结果

>>> a = ["2","1","3",""]
>>> filter(None, a)
['2', '1', '3']
一行:

[v for k,v in sorted(zip(d.keys(),d.values())) if v]
一行:

[v for k,v in sorted(zip(d.keys(),d.values())) if v]
正如@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']
正如@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']

dict1={“b”、“1”、“a”、“2”、“d”、“c”、“3”}不是字典,而是一个集合。此外,您不应该使用
dict
作为变量名。@我还修正了一点,出于某种原因,许多人喜欢在问题中手写所有输入数据,尽管他们通常的意思是您认为的意思,无论如何,我永远不会理解DICT1={“b”、“1”、“a”、“2”、“d”、“1”、“c”、“3”}不是字典,而是一个集合。另外,你不应该使用
dict
作为变量名。@我还修正了一点,出于某种原因,很多人喜欢在他们的问题中手写所有的输入数据,尽管他们通常都是你认为他们的意思,无论如何,我永远都不会明白
过滤器(None,a)
是实现这一点的标准方法。docstring quote:“如果函数为无,则返回为真的项。”@kampu
filter(bool
也是一个标准的
filter(None,a)
是实现这一点的标准方法。docstring quote:“如果函数为无,则返回为真的项。”@kampu
filter(bool
也是一个标准的过滤器,但是
dict.items()
does
zip(d.keys(),d.values())
for youTrue:)我采用了两个列表的排序方法,但项目实际上要好得多,谢谢大家。然而
dict.items()
does
zip(d.keys(),d.values())
for youTrue:)我采用了两个列表的排序方法,但项目实际上要好得多,谢谢