想问下python字典排序 怎么才能先按照值大小降序排列 若值相同 再按照键的字母顺序排呢????

 我来答
lix_xu
2011-10-23 · TA获得超过1213个赞
知道小有建树答主
回答量:823
采纳率:0%
帮助的人:697万
展开全部
暂时只能想到这样的,结果是排序后的键列表。

d = {'a': 3, 'c': 4, 'b': 3, 'd': 2, 'f': 4, 'e': 2}
result = []
keys = sorted(d, key=lambda k: d[k])

for k in keys:
if not result:
result.append(k)
elif d[k] == d[result[-1]] and k < result[-1]:
result.insert(len(result) - 1, k)
else:
result.append(k)

print result
追问
谢谢楼上  不过当值相同的元素很多的时候好像不行吧 因为每次都只比较了result里面的最后一位
追答
好像有这个风险。下面用了一种丑陋的做法。
d = {'x': 3, 'c': 4, 'b': 3, 'd': 2, 'f': 4, 'e': 2, 'k': 3}
temp = {}

for k, v in d.items():
if unicode(v) not in temp:
temp[unicode(v)] = [v, k]
continue

temp[unicode(v)].append(k)

keys = sorted(temp, key=lambda k: temp[k][0])
data = []
for k in keys:
data.extend(sorted(temp[k][1:]))

print data
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
musatayir
2012-03-13
知道答主
回答量:3
采纳率:0%
帮助的人:4692
展开全部
d = {'a': 3, 'c': 4, 'b': 3, 'd': 2, 'f': 4, 'e': 2}
result = {}
keys = sorted(d, key=lambda k: d[k])
print d
print keys
for k in keys:
result[k]=d[k]
print result
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式