web-dev-qa-db-ja.com

dictを値pythonでソートします

私は口述があると仮定します。

data = {1:'b', 2:'a'}

そして、私は結果を得るために「b」と「a」でデータをソートしたい

'a','b'

それ、どうやったら出来るの?
何か案は?

72
kingRauk

値を取得するには

sorted(data.values())

一致するキーを取得するには、key関数を使用します

sorted(data, key=data.get)

値で順序付けられたタプルのリストを取得するには

sorted(data.items(), key=lambda x:x[1])

関連:こちらの説明を参照してください: 辞書はPython 3.6+で並べられています

154
John La Rooy

単にソートされたリストを取得するのではなく、実際に辞書をソートする場合は、 collections.OrderedDict を使用します

>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']
39
jamylak

コメントからgnibblerの回答まで、値でソートされたキーと値のペアのリストが必要だと思います。

sorted(data.items(), key=lambda x:x[1])
17
njzk2

値を並べ替えます。

sorted(data.values())

返す

['a','b']
9
eumiro

すべての回答をありがとう。あなたはすべて私のヒーローです;-)

最終的には次のようなものでした:

d = sorted(data, key = d.get)

for id in d:
    text = data[id]
8
kingRauk

Python dictオブジェクトタイプはハッシュテーブルであることに注意することも重要だと思います( これについてはこちら )。したがって、そのキー/リストへの値。これにより、辞書内の要素のサイズ/数に関係なく、dict項目を一定時間O(1)で取得できます。

そうは言っても、キー(sorted(data.keys())または値-sorted(data.values()))を並べ替えると、そのリストを使用して、次のようなデザインパターンのキー/値にアクセスできます。

for sortedKey in sorted(dictionary):
    print dictionary[sortedKeY] # gives the values sorted by key

for sortedValue in sorted(dictionary.values()):
    print sortedValue # gives the values sorted by value

お役に立てれば。

5
Morgan Wilde

Johnへの応答のコメントでは、値だけでなく、辞書のキーと値が必要であることを提案します。

PEP 256 は、値で辞書をソートするためにこれを提案します。

import operator
sorted(d.iteritems(), key=operator.itemgetter(1))

降順が必要な場合は、これを行います

sorted(d.iteritems(), key=itemgetter(1), reverse=True)
3
Christian Long

ラムダ法なし

# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
    for k, v in d.items():
        if v == i:
            return (k)

sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:   
    key = getkeybyvalue(d,i1)
    sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')
1
xiyurui

Valuesからソート済みリストを作成し、辞書を再構築できます。

myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}

newDictionary={}

sortedList=sorted(myDictionary.values())

for sortedKey in sortedList:
    for key, value in myDictionary.items():
        if value==sortedKey:
            newDictionary[key]=value

出力:newDictionary = {'one': '1'、 'two': '2'、 '1four': '4'、 'five': '5'}

1
Marius