如果政治家

2024-07-05 14:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我把if语句正确地放在我的字典里吗?我试着标记任何一个是NY的用户,让他们在字典里排在第一位。我可以按名称排序,但不清楚如何标记任何纽约用户

names_states = {
  'user1': 'CA',
  'user2': 'NY',
  'user7': 'CA',
  'guest': 'MN',
}


for key in sorted(names_states.iterkeys()):
   2   ...   print "%s :  %s" %(key, names_states[key])
   3   ...
   4   user1 :  CA
   5   user2 :  NY
   6   guest :  MN
   7   user7 :  CA

Tags: key用户标记if字典names语句ca
3条回答
sorted(names_states.iteritems(), key=lambda x: (x[1] != 'NY', x[0]))

这就是你所要求的——所有的纽约人先按名字排序,然后其他人也按名字排序。

names_states = {
    'user1': 'CA',
    'user2': 'NY',
    'user7': 'CA',
    'guest': 'MN',
}

def ny_compare(x, y):
    if names_states[x] == 'NY':
        if names_states[y] == 'NY':
            return cmp(x,y)
        else:
            return -1
    elif names_states[y] == 'NY':
        return 1
    return cmp(x,y)


for key in sorted(names_states.iterkeys(), cmp=ny_compare):
    print "%s :  %s" %(key, names_states[key])

下面是一种方法,它首先将NY值推到顶部,同时仍按用户名作为第一个键进行排序,并将状态作为第二个键:

{'bill': 'NY',
 'frank': 'NY',
 'guest': 'MN',
 'user1': 'CA',
 'user2': 'NY',
 'user7': 'CA'}

def keyFunc(x):
    if names_states[x] == 'NY': 
        return (False, x)
    return (x, names_states[x])

sorted(names_states.iterkeys(), key=keyFunc)

# ['bill', 'frank', 'user2', 'guest', 'user1', 'user7']

注意:这里坚持使用key方法比定义自定义cmp函数快。对于每个项,键函数将只运行一次,而cmp函数将在每个组合中运行。

相关问题 更多 >