Pobieranie string-a/ów do listy

0

Robie sobie zadanka na jednym z popularnych portali (Hackerrank).
Zadanie polega na użyciu kolekcji: OrderDict() zgodnie z poniższym.

INPUT:

9
BANANA FRIES 12
POTATO CHIPS 30
APPLE JUICE 10
CANDY 5
APPLE JUICE 10
CANDY 5
CANDY 5
CANDY 5
POTATO CHIPS 30
 

OUTPUT:

BANANA FRIES 12
POTATO CHIPS 60
APPLE JUICE 20
CANDY 20

Wykonałem to tak:

from collections import OrderedDict

n = int(raw_input())
L = OrderedDict()

for i in range(n):
    item_name, net_price = raw_input().split(' ')
    net_price = int(net_price)
    sum_price = 0

    if item_name in L:
        for j, k in L.items():
            if item_name == j:
                sum_price = k + net_price
                L[item_name] = sum_price
    else:
        L[item_name] = net_price

for i, sum_price in L.items():
    print i, sum_price

Częściowo działa tj: gdy podaje np: BANAN 10, CANDY 5 , CANDY 7 itp działa poprawnie gdy zaś nazwa produktu składa się z 2 elementów to nie działa. Jest to jakby oczywiste bo split(' ') więc dzieli mi po spacji. Nie umiem tego poprawić. Z pewnościa jest jakiś prosty mykens lecz nie bardzo go widzę.
Czyli chciałbym żeby:
item_name = BANANA FRIES
net_price = 10

Jak najmniej inwazyjnie poprawić mój program ?
Sprawa przypuszczam że jest oczywista ale jakoś nie mogę nic wykminić.

0

zalezy czy ma byc to czytane z klawiatury (jak jest teraz) czy z pliku.

Dam Ci taka podpowiedz dla pliku
http://stackoverflow.com/questions/3277503/python-read-file-line-by-line-into-array

0

Chciałbym to zrobić z klawiatury :)

0

składa się z 2 elementów to nie działa. Jest to jakby oczywiste bo split(' ')

Zrób tak:

try:
liczba = int(StringDoPodzielenia.split(" ")[-1])
except ...........................

0

Siema tu Tokyo (wcześniej Złoty Krawiec). Można to zrobić ciut lepiej:

do bloku try/except wrzucić:

listaS = WczytanyString.split(" ")
szukanaLiczba = int( listaS[-1].strip() ) # Usuniesz niepotrzebne (dodatkowe) spacje, ogólnie białe znaki

Dobrze konstrukcje try/except wrzucić do pętli while i powtarzać zapytanie tak długo, aż użytkownik nie wpisze poprawnie danych

2

A może tak?:

'jakis string 4'.rsplit(maxsplit=1)
0
NoZi napisał(a):

A może tak?:

'jakis string 4'.rsplit(maxsplit=1)

Dobre. Tego nie znałem, wiem, że są strip i lstrip i rstrip. Ale o rsplit nie słyszałem.

0

Poradziłem sobie tak:

item_name, net_price = raw_input().rsplit(' ', 1) 

Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1