想问下python字典排序 怎么才能先按照值大小降序排列 若值相同 再按照键的字母顺序排呢????
2个回答
展开全部
暂时只能想到这样的,结果是排序后的键列表。
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
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询