for key, value in sorted(names_states.iteritems(),
key=lambda (key, value): ((0 if value == 'NY' else 1), key)):
print((key,value))
ここで iteritems() は、辞書内のキーと値のペアに対する反復子を取得します。次に、それらのキーと値のペアを並べ替えることができます。ラムダ式は、あなたが言うようにリストをソートする一連のキーを作成します。これは、最初の要素が値であるかどうかに基づいた数値であるタプルを返すことによって行われ'NY'
ます。基本的に、タプルは最初の要素でソートされ、次に 2 番目の要素でソートされるという事実を利用しています。
とは言っても、これはかなり面倒に見え始めているので、もっと冗長でわかりやすい方法を見つけたいと思うかもしれません。
dict をサブクラス化し、必要な順序でキー、値、またはキーと値のペアを公開する追加のメソッドを追加することができます。
そうすれば、次のような単純なものを作成できます。
names_states = MyDict({
'user1': 'CA',
'user2': 'NY',
'user7': 'CA',
'guest': 'MN',
})
for key, value in names_states.iteritems_with_given_values_first('NY'):
...
class MyDict(dict):
def __init__(self, *args, **kwargs):
super(MyDict, self).__init__(*args, **kwargs)
def iteritems_with_given_values_first(self, preferred_value):
for key, value in sorted(names_states.iteritems(),
key=lambda (key, value): ((0 if value == preferred_value else 1), key)):
yield key, value