新手提问,python问题,先谢谢了。

defranking_judge(self,user_id,interface_id):ranking={}if(interface_id==0):ran=ranking... def ranking_judge(self,user_id,interface_id):
ranking= {}
if(interface_id==0):
ran= ranking_api.data_return(self,user_id)
if ran:
rank= sorted(ran,reverse = True,key = lambda x:x['lv'])
for i in range(200):
ranking['ranking']= rank
return ranking

def data_return(self,user_id):
rankinglist={}
user_info=user_data.storage().user_info(user_id) #这里是我调用数据库的方法
if user_info:
rankinglist['name']= user_info['nickname']
rankinglist['lv']= user_info['user_grade']
if user_info['league_id']==1:
rankinglist['league_id']= user_info['league_id']
if user_info['league_id']==0:
rankinglist['league_id']= True
return rankinglist

提示错误:string indices must be integers, not str
请高手帮帮忙了!
rank= sorted(ran,reverse = True,key = lambda x:x['lv'])

这里错误
展开
 我来答
左手编码
推荐于2017-09-17 · TA获得超过756个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:352万
展开全部
索引必须是整数。
rank= sorted(ran,reverse = True,key = lambda x:x['lv'])你是想按某个属性来排序。
key = lambda x:x['lv']中的x['lv']是错误的写法,应该是x[0],x[1]......例:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> print sorted(L, key=lambda x:(x[1],x[0]))
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
先按第二个排序,在按第一个属性排序。
或者直接key=lambda x:x.lv
追问
f = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}]
f2 = sorted(f,reverse = True,key = lambda x:x['age'])
print f2
这能从大到小排列哦。还有这样写(x[0],x[1])的话好像很麻烦,因为它是一个用户信息,里面很多字段。
追答
你循环取下ran里面的数据,这样取
for x in ran:
print x['lv']
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式