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

ワンライナー:

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

並べ替えの結果を単純にフィルタリングする

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