Работа с sys.stdin

имеется вот такой код Python 3.

import sys
data = sys.stdin.readlines()
d = {}
for _ in data:
    actor = _.split(" - ")[0]
    action = _.split(" - ")[1]
    if actor in d:
        d[actor] = d[actor] + action
    else:
        d[actor] = action
for i in d:
    print(i, ":", end="")
    for ii in d[i]:
        print(" ", ii, end="")
    print()

Для ввода

aa - f
aa - s
bb - h

Вывод должен составлять

aa : f s
bb : h

А составляет он вместо этого

aa :  f
  s

bb :  h

Собственно, вопрос - почему? Я подозреваю, что где-то затесались лишние переходы на новую строку. Но что с ними делать?


Ответы (1 шт):

Автор решения: nomnoms12

Лишние переводы затесались в data. Убрать можно с помощью метода строк rstrip.

Пример:

data = ['aa - f\n', 'aa - s\n', 'bb - h']
data = list(map(str.rstrip, data))
print(data)

stdout:

['aa - f', 'aa - s', 'bb - h']


Полный оптимизированный пример:

data = ['aa - f\n', 'aa - s\n', 'bb - h']
data = list(map(str.rstrip, data))

d = {}
for s in data:
    actor, action = s.split(" - ")
    d[actor] = d.get(actor, '') + action

for x in d:
    print(x, ':', *d[x])

stdout:

aa : f s
bb : h
→ Ссылка