Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/55: Рейтинг темы: голосов - 55, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65

Как в функции print перенести на следующую строку атрибут словаря в словаре?

24.06.2020, 18:32. Показов 11102. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При выводе кода о Казани получается очень длинная строка из-за третьего атрибута словаря в словаре. Почему-то "\n" не работает ни с "men\n", ни с "\nfackt". Подскажите, пожалуйста, как можно перенести этот атрибут на другую строку?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cities = {
    "Moscow" : {"country" : "Russia ",
                       "population" : str(12,6) + " mln men",
                       "fact" : " Moscow is a capital Russia"
                      },    
    "Kazan" : {"country" : "Russia ",
                    "population" : str(1,2) + " mln men[B][COLOR="Red"] \n"[/COLOR][/B], 
                    "fact" : "city in Russia, the capital of the Republic of Tatarstan"},
                    }
for k,v in cities.items():
    if "Moscow" in k:
        print("About Moscow: ")
        print(v)    
    if "Kazan" in k:
        print("About Kazan: ")
        print(v)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.06.2020, 18:32
Ответы с готовыми решениями:

Как проверить наличие значения словаря словаря в словаре словарей?
есть массив parsdata, который содержит результаты парсинга. нужно проверить, спарсилось ли что-то новое. или нет в сравнении со словарем...

Не происходит перенос строки в функции print также как в значении словаря
Здравствуйте. Подскажите, пожалуйста, как сделать перенос текста, который находится в значении словаря при выводе его через функцию print? ...

Как перенести div на следующую строку?
Создал макет, и возникла проблема с переносом блоков. <div id="left"> Левый блок 1 </div> <div...

16
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.06.2020, 20:18
Цитата Сообщение от RinaGrig Посмотреть сообщение
Почему-то "\n" не работает
Потому что Kazan у тебя не строка, а словарь. Словарь выводится как есть без учета escape последовательностей внутри его содержимого.

Добавлено через 28 секунд
Цитата Сообщение от RinaGrig Посмотреть сообщение
str(1,2)
Это неправильно и вызовет ошибку.
1
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,291
24.06.2020, 20:27
а что вы хотите этим получить? str(12,6) ? кортеж к строке превести или получить строку 12,6 ?
во вторых вы выводите словарь а не строку
Python
1
2
3
About Kazan: 
{'country': 'Russia ', 'population': '1,2 mln men', 'fact': 'city in Russia, the capital of the Republic of Tatarstan'}
>>>
в третьих у вас и ключ "Moscow" есть и ключ "Kazan" так что ваши условия бессмыслены. у вас же выводит оба ключа
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cities = {
"Moscow" : {"country" : "Russia ",
         "population" : '12,6 mln men',
         "fact" : " Moscow is a capital Russia"
              },
 
"Kazan" : {"country" : "Russia ",
          "population" : '1,2 mln men',
           "fact" : "city in Russia, the capital of the Republic of Tatarstan"},
    }
 
def format_print(text,val):
    print(text)
    for k,v in val.items():
        print(f'{k} - {v}')
    print()
    
 
for k,v in cities.items():
    if "Moscow" == k:
        format_print("About Moscow: ", v)
    elif "Kazan" == k:
        format_print("About Kazan: ", v)
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
24.06.2020, 22:31  [ТС]
Cо строкой я действительно лажанулась и правильно для этой задачи str("12,2"). Здесь строка, а не кортеж. Спасибо, что обратили внимание.
Semen-Semenich, за функцию отдельное спасибо. Результат просто шикарный! Для меня это еще сложновато, но очень красиво получилось).

По-большому счету задача - улучшить код и я не пришло в голову ничего лучшего, чем разбить на строки в printe атрибуты (в смысле "ключ-значение") словаря в словаре.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.06.2020, 09:58
Классы ещё не изучали? Они прям просятся здесь
0
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
25.06.2020, 10:15  [ТС]
Рыжий Лис, классы в рамках ООП изучала в другом языке. Быстро.
Просто сейчас вернулась к питону и иду строго по книжке, чтобы все основательно уложилось, и появилось хорошее понимание всех процессов.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.06.2020, 10:24
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class City:
    def __init__(self, name, country, population, fact):
        self.name = name
        self.country = country
        self.population = country
        self.fact = fact
 
    def __str__(self):
        return '\n'.join((
            f"About {self.name}:",
            f"Country: {self.country}",
        ))
        
 
cities = [
    City("Moscow", country="Russia", population='12,6 mln men', fact="Moscow is a capital Russia"),
    City("Kazan", country="Russia", population='1,2 mln men', fact="city in Russia, the capital of the Republic of Tatarstan"),
    ]
 
 
for i in cities:
    print(i)
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
25.06.2020, 10:50  [ТС]
Рыжий Лис, сразу прошу прощения за мой французский. Просто интересно, что происходит в Вашем коде:
1. создали класс City
2. в нем написали 2 функции:
2.1. в первой определили 4 параметра(название города; страну; численность населения; факт о городе)
2.2. во второй делаем что-то важное
3. ого, а здесь создали список, в котором параметрам из первой функции присвоили нужные значения
4. перебрали значения и все вывели
Не понимаю почему выводятся только первые два элемента(параметра - about ..., страна):
About Moscow:
Country: Russia
About Kazan:
Country: Russia
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.06.2020, 11:02
Уточнения:
2) *метода
2.1) *в "конструкторе" инициализируем поля объекта
3) *создали список с объектами
Цитата Сообщение от RinaGrig Посмотреть сообщение
Не понимаю почему выводятся только первые два элемента(
Потому что метод __str__ реализован не полностью.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
25.06.2020, 11:19
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class City:
    def __init__(self, name: str, country: str, population: float, fact: str):
        self.name = name
        self.country = country
        self.population = population
        self.fact = fact
 
    def __str__(self) -> str:
        return "\n".join((
            f"{self.__class__.__name__} {self.name}:",
            f"    country: {self.country}",
            f"    population: {self.population} mln men",
            f"    fact: {self.fact}"
        ))
 
cities = [
    City("Moscow", country="Russia", population=12.6, fact="Moscow is a capital Russia"),
    City("Kazan", country="Russia", population=1.2,
         fact="city in Russia, the capital of the Republic of Tartar-stan"),
]
 
print(*cities, sep="\n")
Добавлено через 3 минуты
Можно переопределить метод __repr__:
Python
1
2
    def __repr__(self) -> str:
        return f"{self.__class__.__name__}({self.name})"
Тогда при таком вызове print будет:
Python
1
print(cities)  # [City(Moscow), City(Kazan)]
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
25.06.2020, 13:20  [ТС]
Чувствую себя ребенком в кондитерской лавке и так с методом __str__ получается:

About Moscow:
Country: Russia
Population: Russia
Fact: Moscow is a capital Russia
About Kazan:
Country: Russia
Population: Russia
Fact: city in Russia, the capital of the Republic of Tatarstan

и так с методом __repr__ получается (страна, численность населения и факт а автоматически с отступом):

City Moscow:
country: Russia
population: 12.6 mln men
fact: Moscow is a capital Russia
City Kazan:
country: Russia
population: 1.2 mln men
fact: city in Russia, the capital of the Republic of Tartarstan

и даже что-то понятно. Огромное спасибо!!!
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.06.2020, 14:35
__repr__ он для чего-то другого. Ну и ладно

Добавлено через 2 минуты
Если вернуться к словарям:
Python
1
2
3
4
for k, v in cities.items():
    print(f"About {k}:")
    for k2, v2 in v.items():
        print(f'    {k2} - {v2}')
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
25.06.2020, 14:49  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Если вернуться к словарям:
Нериально. Глава в книге о словарях закончилась, а такого там не было. Это просто супер потрясающе, что можно с обычными словарями сделать.

Рыжий Лис, только не погу найти, что такое f"About {k}:". Где можно почитать об "f" и {k}?
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
25.06.2020, 15:01
RinaGrig, например, вот тут
А вообще лучше вот так
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
25.06.2020, 15:07  [ТС]
Цитата Сообщение от zhurban Посмотреть сообщение
А вообще лучше вот так
))))))

А что такое {k}?
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
25.06.2020, 15:11
Цитата Сообщение от RinaGrig Посмотреть сообщение
А что такое {k}?
Ну скобки - отделение строки от переменной, а k - собственно сама переменная. Тоесть на место {k} в результате в строке будет значение этой переменной
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
25.06.2020, 15:16
Это f-string - современный и быстрый формат строки. Ещё: https://pyformat.info/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2020, 15:16
Помогаю со студенческими работами здесь

Как перенести каждое последующее слово в блокноте на следующую строку?
Ребят, подскажите, как написать, чтобы в созданном файле каждое последующее предложение появлялось на следующей строке. Вот код: ...

После каждой запятой следующую запись перенести на новую строку
Добрый день! возникла задача.. есть даные в строке 2456, 2457, 2474, 2499, 2500, 2501, 2502, 2504, 2506, 2507, 2508, 2769, 2791, 2793,...

Вывести слово, и если оно больше 16 символов - перенести его на следующую строку
Здравствуйте помогите пожалуйста! есть такое задание нужно написать программу которая выводила бы слово и если оно больше 16 символов то...

Как перенести в редакторе длинный print?
Как можно перенести часть принта на новую строку без потери работоспособности? print(shape.Shape(self.shapes.border,...

Создание кортежа в словаре словаря
Всем привет. Пытаюсь создать словарь и присвоить ему значения Dictionary<string, Dictionary<string, Tuple<Point, Image,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru