2015-04-19 3 views
0

предположим список, как этосортировки элементов в списке в питона

l = [("Texas","city1"), ("Texas","city2"), ("Texas","city3"), ("Texas","city4"), ("Texas","city5"), 
("Georgia","city6"), ("Georgia","city9"), ("Georgia","city10"), 
("Alabama","city7"), ("Alabama","city8")] 

Этот список будет иметь уникальные названия штатов.

Теперь мне нужно сделать две вещи с этим списком.

1) сортировка по штатам первая и города вторая. говорите после сортировки на основе состояний первых городов и второго список выглядит следующим образом

l = [("Georgia","city6"),("Georgia","city9"),("Georgia","city10"),("Texas","city1"), ("Texas","city2"), ("Texas","city3"), ("Texas","city4"), ("Texas","city5"),("Alabama","city7"), ("Alabama","city8")] 

2) после этого шага мне нужно, чтобы состояния были алфавитным с соответствующими городами. Скажем, мне нужно, наконец, подобрать формат.

l = [("Alabama","city7"), ("Alabama","city8"),("Georgia","city6"),("Georgia","city9"),("Georgia","city10"),("Texas","city1"), ("Texas","city2"), ("Texas","city3"), ("Texas","city4"), ("Texas","city5")] 

отсортирован (lsNearCities, ключ = operator.itemgetter (0,1)) -> Я полагаю, это будет сортировать на основе состояний, а затем города второй. И после этого как я должен выполнить список, который мне нужен, используя python. Пожалуйста, помогите.

ответ

0

Как об этом:

l = [("Texas","city1"), ("Texas","city2"), ("Texas","city3"), ("Texas","city4"), ("Texas","city5"),("Georgia","city6"), ("Georgia","city9"), ("Georgia","city10"),("Alabama","city7"), ("Alabama","city8")] 

def cmp(x,y): 
    if x[0]<y[0]: 
     return -1 
    elif x[0]>y[0]: 
     return 1 
    elif x[1]<y[1]: 
     return -1 
    elif x[1]>y[1]: 
     return 1 
    else: 
     return 0 

l.sort(cmp) 
print l 

Кстати, это по умолчанию сортировка, так что если вы не хотите, чтобы сделать разного рода, то вы просто можете просто сделать:

l.sort() 

Вы можете изменить функцию cmp для разных режимов сортировки. Я не уверен, что вы подразумеваете под «алфавитом»?

+0

Большое спасибо за ответ. Мой код здесь lsNearCities = [] state_and_cities = str (nearCity) + "," + str (состояние) lsNearCities.append (state_and_cities) sorted (lsNearCities, key = operator.itemgetter (1,0)). Что я должен добавить после этого? пожалуйста, дайте мне фрагмент в соответствии с моим кодом, так как я новичок в python. – harinish

+0

lsNearCities = [('Abbeville', 'SC'), ('Easley', 'SC'), ('Baxter', 'TN'), ('Ducktown', 'TN'), ('Sylva', ' NC '), (' Rutherfordton ',' NC '), (' Covington ',' GA '), (' Clarkston ',' GA '), (' Maylene ',' AL '), (' Hatton ',' AL ')] четкости CMP (х, у): \t если х [0] <у [0]: \t \t возврата -1 \t ELIF х [0]> у [0]: \t \t возвращение 1 \t ELIF х [1] <у [1]: \t \t возвращают -1 \t ELIF х [1]> у [1]: \t \t возврата 1 еще: \t \t возвращение 0 lsNearCities.sort (CMP) печати lsNearCities [('Аббевилль', 'СК'), ('Бакстер', 'TN'), ('Кларкстон', 'GA'), ('Cowington', 'GA'), ('Ducktown', 'TN'), ('Easley', 'SC'), ('Hatton', 'AL'), ('Maylene', 'AL'), ('Rutherfordton', 'NC'), ('Sylva', 'NC')] – harinish

+0

Я попробовал вашу функцию и получил выход как показано выше. Я хочу, чтобы lsNearCities = [('Hatton', 'AL'), ('Maylene', 'AL'), ('Clarkston', 'GA'), ('Covington', 'GA'), ('Rutherfordton '', 'NC'), ('Sylva', 'NC'), ('Abbeville', 'SC'), ('Easley', 'SC'), ('Baxter', 'TN'), ('Ducktown ',' TN ')] – harinish

Смежные вопросы