私は口述があると仮定します。
data = {1:'b', 2:'a'}
そして、私は結果を得るために「b」と「a」でデータをソートしたい
'a','b'
それ、どうやったら出来るの?
何か案は?
値を取得するには
sorted(data.values())
一致するキーを取得するには、key
関数を使用します
sorted(data, key=data.get)
値で順序付けられたタプルのリストを取得するには
sorted(data.items(), key=lambda x:x[1])
関連:こちらの説明を参照してください: 辞書はPython 3.6+で並べられています
単にソートされたリストを取得するのではなく、実際に辞書をソートする場合は、 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']
コメントからgnibblerの回答まで、値でソートされたキーと値のペアのリストが必要だと思います。
sorted(data.items(), key=lambda x:x[1])
値を並べ替えます。
sorted(data.values())
返す
['a','b']
すべての回答をありがとう。あなたはすべて私のヒーローです;-)
最終的には次のようなものでした:
d = sorted(data, key = d.get)
for id in d:
text = data[id]
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
お役に立てれば。
Johnへの応答のコメントでは、値だけでなく、辞書のキーと値が必要であることを提案します。
PEP 256 は、値で辞書をソートするためにこれを提案します。
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
降順が必要な場合は、これを行います
sorted(d.iteritems(), key=itemgetter(1), reverse=True)
ラムダ法なし
# 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 ('=======================')
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'}