сортировка списка кортежей Python - PullRequest
1 голос
/ 30 марта 2011

поэтому у меня есть список с целой кучей кортежей

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

##############################РЕДАКТИРОВАТЬ####################################

также, когда я попытался напечатать список кортежей, он вернул бы эту ошибку:

  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 ]

1 голос
/ 30 марта 2011

я тоже думаю, что все в порядке [на быстрый взгляд] .. проверьте эту ссылку .. речь идет о различных методах сортировки в python

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

1 голос
/ 30 марта 2011

Я думаю, что ваш код работает правильно, и вы видите первую часть списка, где ключ действительно 0,0. Вы просто сортируете список в порядке возрастания: -)

0 голосов
/ 30 марта 2011

Вероятно, стоит сравнить отсортированные и несортированные списки, чтобы увидеть, действительно ли сортировка изменяет данные. Вы можете попробовать что-то простое, как:

print sum(e[2] for e in j)
j = sorted(j, key=lambda e : e[2])
print sum(e[2] for e in j)
0 голосов
/ 30 марта 2011

Как уже говорили другие, код в порядке.Вы должны попытаться изолировать ситуацию и попытаться выяснить, где именно возникла проблема.

  • Это происходит в простом сценарии, который содержит только назначение списка и операцию сортировки?
  • Работают ли другие операции со списками?Попробуйте нарезку, повторение по ней или сортировку без пользовательской функции.
  • Это происходит в срезе текущего списка? Метод деления пополам ваш друг здесь.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...