for key, value in sorted(names_states.iteritems(),
key=lambda (key, value): ((0 if value == 'NY' else 1), key)):
print((key,value))
这里 iteritems() 为我们提供了一个遍历字典中键/值对的迭代器。然后我们可以对这些键/值对进行排序。lambda 表达式创建一组键,将按照您所说的对列表进行排序。它通过返回元组来做到这一点,元组的第一个元素是一个基于值是否存在的数字'NY'
。基本上,我使用的事实是元组按它们的第一个元素排序,然后是它们的第二个元素,依此类推。
也就是说,这开始看起来很混乱,所以你可能想找到一种更详细但更清晰的方法来做到这一点。
您可能希望继承 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