Как вывести ключ в словаре столько раз, сколько указано в его значении?
Имею вот такой код, который работает по принципу:
Формат ввода: В первой строке записано натуральное число n (n - количество всех дел). В каждой из следующих n строках записаны пары: строка (цвет задачи), число (номер задачи).
Формат вывода: В n строках выводится упорядоченный список задач: каждая задача в новой строке.
def display_hand(hand):
print ("".join(k*v for (k,v) in d.items()), end = ' ')
d = {}
n = int(input())
for i in range(n):
temp_list = list(map(str, input().split()))
d[temp_list[0]] = temp_list[1]
# Отделил мутню с преобразованием словаря, чтобы значение из str в int перешло
# Пример: ['a': '1', 'b': '2'] --> ['a': 1, 'b': 2]
# ------
d1 = []
d1.append(d)
for sub in d1:
for key in sub:
sub[key] = int(sub[key])
# ------
print(d)
display_hand(d)
Пример входных и выходных данных прикрепил. На данный момент на выходе имею:
{'lavender': 2, 'fuchsia': 2, 'orchid': 4, 'purple': 1}
Имею функцию, которая почти выполняет данный функционал (вообще неправильно работает xd), в общем идея следующая: Считывать число в значении ключа и выводить столько раз, сколько указано в значении. В общем как в примере. Подскажите пожалуйста!
Ответы (2 шт):
Вашу задачу можно решить без словарей:
n = int(input())
d = []
for _ in range(n):
line = input().split()
d.append((line[0], int(line[1])))
d.sort(key=lambda x: (x[0], x[1]))
for el in d:
print(*el)
# вывести можно еще так:
print(*(' '.join(map(str, el)) for el in d), sep='\n')
Если вы ОЧЕНЬ любите однострочники:
print(
*(
' '.join(map(str, el))
for el in sorted(
[
(lambda x: (x[0], int(x[1])))(input().split())
for _ in range(int(input()))
],
key=lambda x: (x[0], x[1]),
)
),
sep='\n'
)
UPD:
Убрал key по совету Stanislav Volodarskiy:
n = int(input())
d = []
for _ in range(n):
line = input().split()
d.append((line[0], int(line[1])))
d.sort()
# вывести можно еще так:
print(*(' '.join(map(str, el)) for el in d), sep='\n')
print(
*(
' '.join(map(str, el))
for el in sorted(
[
(lambda x: (x[0], int(x[1])))(input().split())
for _ in range(int(input()))
],
)
),
sep='\n'
)
если отвечать непосредственно на поставленный вопрос, то ваш словарь можно напечатать примерно так (правда он у вас не отсортирован):
d = {'lavender': 2, 'fuchsia': 2, 'orchid': 4, 'purple': 1}
for k,v in d.items():
for i in range(v):
print(f'{k} {i+1}')
>>> out
'''
lavender 1
lavender 2
fuchsia 1
fuchsia 2
orchid 1
orchid 2
orchid 3
orchid 4
purple 1
upd
тут кстати можно обойтись простой сортировкой с ключом, примерно так:
n = int(input())
temp_list = []
for i in range(n):
temp_list.append(input('inp: '))
print(*sorted(temp_list, key=lambda x: (x.split()[0], int(x.split()[1]))), sep='\n')
>>> out
'''
4
inp: a 12
inp: b 11
inp: a 5
inp: b 10
a 5
a 12
b 10
b 11
