python元组列表排序

时间:2011-03-30 06:11:09

标签: python list sorting python-3.x tuples

所以我有一大堆元组的列表

j = 

[('jHKT', 'Dlwp Dfbd Gwlgfwqs (1kkk)', 53.0),
('jHKT', 'jbdbjf Bwvbly (1kk1)', 35.0),
('jHKT', 'Tfstzfy (2006)', 9.0),
('jHKT', 'fjznfnt Dwjbzn (1kk1)', 25.0),
('jHKT', 'Vznbsq sfnkz (1k8k)', 4.0),
('jHKT', 'fxzt, Clwwny! (2005)', 8.0),
('jHKT', "Dwfs Thzs jfbn Wf'lf jbllzfd? (1kk1)", 12.0),
('jHKT', 'Chbzljbn wf thf Bwbld (1kk8)', 30.0),
('jHKT', 'Vblfdzctzwn (2006)', 8.0),
('jHKT', 'jwltbl Kwjbbt (1kk5)', 13.0)]

我尝试使用元组的第三个元素作为索引对其进行排序:

请注意,上面的列表只是一个部分列表......实际列表包含数千个元素

无论如何,所以我做了:

j = sorted(j, key=lambda e : e[2])

但是当我这样做时,它最终弄乱了元组的第三个元素,我高度怀疑它实际排序了......这是输出的另一个部分列表

('jHKT', 'Frz yzng (2004)', 0.0)
('jHKT', 'kff thr Mvp (2003)', 0.0)
('jHKT', 'HzpHkpBvttlr.ckm: Hzp Hkp 4 Lzfr (2001)', 0.0)
('jHKT', 'z Wvlk thr Lznr (1970)', 0.0)
('jHKT', '1971: erzsknrrs kf svr (2007)', 0.0)
('jHKT', 'Wzld Rzdr, Thr (1960)', 0.0)
('jHKT', 'Dzshdkgz (2005)', 0.0)
('jHKT', 'Lzttlr Thzngs, Thr (2006)', 0.0)
('jHKT', 'Trrmznvl rrrkr (2002)', 0.0)
('jHKT', 'Hqngry Bvchrlkrs Clqb, Thr (1999)', 0.0)
('jHKT', 'Swrrt Lkvr, Bzttrr (1967)', 0.0)
('jHKT', 'Trn tk Chz tk (1990)', 0.0)
('jHKT', 'Bvr-Crl-knv (1987)', 0.0)
('jHKT', 'Rknny & Czndy zn vll kf qs (2006)', 0.0)

在这种情况下,它最终将元组的所有第三个元素重置为0 ...

我做错了什么?

我正在使用python 3

############################## EDIT ############# #######################

另外,当我尝试打印元组列表时,它会返回此错误:

  print(j)
IOError: [Errno 22] Invalid argument

并且打印会突然停止......:

 ('sadfasdf (1991)', 'xcvwert (1985)', 0.0), ('r3sdaf (1991)', 'jkzxkk (1993)', 0.0), ('werwww (1991)', 'Third WhTraceback (most recent call last):

然后出现错误

################ EDIT ###################

另一方面,通过迭代打印列表工作正常

所以

for i in j:
    print(i)

工作正常,而只是print(j)会返回该错误

4 个答案:

答案 0 :(得分:1)

我认为你的代码工作正常,你会看到列表的第一部分,其中key是真正的0.0。您只需按升序对列表进行排序: - )

答案 1 :(得分:1)

我也认为它很好[快速浏览] .. 检查此链接..它是关于python中的各种排序技术

http://wiki.python.org/moin/HowTo/Sorting/

答案 2 :(得分:0)

正如其他人所说,代码完全没问题。您应该尝试隔离情况并尝试找出问题的确切位置。

  • 是否只在一个只包含列表赋值和排序操作的简单脚本中发生?
  • 其他列表操作是否有效?尝试切片,迭代它,或者在没有自定义函数的情况下进行排序。
  • 它是否发生在当前列表的一部分中? Bisection method是你的朋友。

答案 3 :(得分:0)

可能值得比较已排序和未排序的列表,以查看排序是否实际上正在更改数据。你可以尝试一些简单的事情:

print sum(e[2] for e in j)
j = sorted(j, key=lambda e : e[2])
print sum(e[2] for e in j)