Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
1

Сортировка по комнатам

20.07.2017, 14:15. Показов 1947. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеются подсписки Lists (в каждый из которых входят 2 элемента с индексами [0] и [1] :
0 List
[0] Комната 1
[1] Пирожок

1 List
[0] Комната 1
[1] Яблоко

2 List
[0] Комната 2
[1] Мишка

3 List
[0] Комната 2
[1] Зебра
______________________________________
Вопрос : как получить через питон вот такие подсписки (т.е. рассортировать по названию комнаты)
________________________________________________________________________________ ______

0 List
[0] Комната 1
[1] Пирожок
[2] Яблоко

1 List
[0] Комната 2
[1] Мишка
[2] Зебра
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2017, 14:15
Ответы с готовыми решениями:

Распределение людей по комнатам
Задача, есть N людей, у каждого человека есть 1+ допуски в комнаты, то-есть человек со свойствами...

Переходы по комнатам в квест игре 2D
Существуют квестовые игры 2D в которых для решения разгадки нужно ходить по комнатам. Так вот как...

Вывести данные о студентах по комнатам
Доброго времени суток. Можете посоветовать по задачке? Информация содержит фамилию студента,...

Проблема с распределением интернета по комнатам
Проблема вот в чем, интернет не поступает в "розетку в зале" точнее роутер не видет порты 2 и 3....

9
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
20.07.2017, 15:32 2
Лучший ответ Сообщение было отмечено rar как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from collections import defaultdict
from operator import itemgetter
 
myList = [
    ['Комната 1', 'Пирожок'],
    ['Комната 1', 'Яблоко'],
    ['Комната 2', 'Мишка'],
    ['Комната 2', 'Зебра']]
 
d = defaultdict(list)
for x in myList:
    d[x[0]].append(x[1])
 
print (sorted([[k,*v] for k,v in d.items()], key = itemgetter(0)))
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.07.2017, 00:20  [ТС] 3
В какой именно программе нужно запусить этот код?
я запускал через Visual Studio Code
что т не получается...

Добавлено через 27 минут
MICRISOFT Visual Studio...
Спасибо за код!))

Добавлено через 7 часов 19 минут
Есть ли аналогичное решение но стандартными средствами питона (без подключения библиотек) например используя только циклы ?
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
21.07.2017, 03:41 4
Цитата Сообщение от rar Посмотреть сообщение
В какой именно программе нужно запусить этот код?
я запускал через Visual Studio Code
что т не получается...

Добавлено через 27 минут
MICRISOFT Visual Studio...
Спасибо за код!))

Добавлено через 7 часов 19 минут
Есть ли аналогичное решение но стандартными средствами питона (без подключения библиотек) например используя только циклы ?
Запускать нужно в python 3
https://www.python.org/downloads/

Использованные в программе библиотеки стандартные и являются частью python, но если вам надо совсем по простому, то вот:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
myList = [
    ['Комната 1', 'Пирожок'],
    ['Комната 1', 'Яблоко'],
    ['Комната 2', 'Мишка'],
    ['Комната 2', 'Зебра']]
 
rooms = dict()
for x in myList:
    room = x[0]
    if room in rooms:
        rooms[room].append(x[1])
    else:
        rooms[room] = [x[1]]
result = sorted([[k,*v] for k,v in rooms.items()], key = lambda x: x[0])
print(result)
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.07.2017, 09:55  [ТС] 5
Дело в том , что я использую вероятно незнакомый вам Python for dynamo который является приложением к программе Revit , однако может использоваться независимо от него. И в этом питоне данных встроенных библиотек я не нашел , поэтому просил упростить код. .. Попробую и отпишусь

Добавлено через 1 час 1 минуту
Спасибо !
все работает , однако есть один нюанс
Питон динамо не понимает (выдает ошибку) обозначение "звездочка" *v (строчка №14 вашего кода) как я понял, он загоняет строки "Комната ..." в свои подлисты...
можно это сделать иначе? что то вроде [k,[v]] ....что ли...
пока делаю без звездочки то есть так без звездочки: ...[k[v]...
0
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.07.2017, 10:05  [ТС] 6
если убрать звездочку получается так:
Миниатюры
Сортировка по комнатам  
0
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.07.2017, 10:10  [ТС] 7
а нужно так (в python 3 ваш код работает как надо, в моем питоне не хочет звездочку принимакть) но не используя звездочку:
Миниатюры
Сортировка по комнатам  
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
21.07.2017, 10:53 8
Лучший ответ Сообщение было отмечено rar как решение

Решение

Без *
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
myList = [
    ['Комната 1', 'Пирожок'],
    ['Комната 1', 'Яблоко'],
    ['Комната 2', 'Мишка'],
    ['Комната 2', 'Зебра']]
 
rooms = dict()
for x in myList:
    room = x[0]
    if room in rooms:
        rooms[room].append(x[1])
    else:
        rooms[room] = [x[1]]
result = sorted([[k,v] for k,v in rooms.items()], key = lambda x: x[0])
for x in result:
    for y in x[1]:
        x.append(y)
    x.remove(x[1])
print(result)
1
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.07.2017, 10:57  [ТС] 9
ОГРОМНОЕ ВАМ СПАСИБО!!! )))
0
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
17.09.2017, 15:51  [ТС] 10
Доброго дня, появился новый вопрос в дополнение к уже решенной задаче...
Возможно ли при аналогичной задаче сделать код более универсальным , когда элементов в подсписках произвольное количество?

Имеются подсписки Lists (в каждый из которых входят произвольное количество элементов ) :
0 List
[0] Комната 1
[1] Пирожок
[2] Пирожок 2

1 List
[0] Комната 1
[1] Яблоко

2 List
[0] Комната 2
[1] Мишка

3 List
[0] Комната 2
[1] Зебра 1
[2] Зебра 2
[3] Зебра 3
______________________________________
Вопрос : как получить через питон вот такие подсписки (т.е. рассортировать по названию комнаты)
________________________________________________________________________________ ______

0 List
[0] Комната 1
[1] Пирожок
[2]Пирожок 2
[3] Яблоко

1 List
[0] Комната 2
[1] Мишка
[2] Зебра 1
[3] Зебра 2
[4] Зебра 3

Может быть используя... itertools.groupby (пробовал самостоятельно что то сделать - безрезультатно, но почему то мне кажется что нужно использовать именно этот метод..)
0
17.09.2017, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2017, 15:51
Помогаю со студенческими работами здесь

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

Поиск пути по комнатам через клады
Найти кратчайший путь, проходящий через все комнаты с кладом (клад в комнате обозначается знаком $)...

Перебрать все возможные переходы по комнатам музея
Здравствуйте, застрял на одной задачке... В базе данных есть таблица "Залы", в которой есть 7...

Запрос за вывод свободных мест в общежитии по комнатам
Необходима процедура на вывод свободных койко-мест (по комнатам) в общежитии, но как сделать - не...

Существуют ли программы создания интерьера, позволяющие сымитировать прогулку по комнатам ?
Добрый вечер. Существуют программы, позволяющие в трехмерном виде смоделировать интерьер комнаты...

Вывести путь, который нужно пройти, чтобы собрать все предметы, разбросанные по комнатам
Здравствуйте ребята, помогите с решением На днях задали вот такую задачку: Напишите программу ,...

Сортировка выбором, Сортировка простыми вставками, Сортировка пузырьком, Сортировка слиянием, Быстрая сортировка Хоара
Имеется список товаров, хранящихся на базе. Каждая строка этого списка содержит: инвентарный номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru