Jak przypisać wartości do istniejącego słownika iterując po listach.

0

Mam słownik z kluczami bez wartości:

teams = {'Chelsea': '', 'Manchester City': '', 'Aston Villa': '',
           'Wolves': '', 'Crystal Palace': '', 'Tottenham': '',
           'Leeds': '', 'West Ham': '', 'Southampton': '',
           'Nottingham': '', 'Arsenal': '', 'Newcastle': '',
           'Everton': '', 'Brighton': '', 'Leicester': '',
           'Fulham': '', 'Manchester Utd': '', 'Bournemouth': '',
           'Brentford': '', 'Liverpool': ''}

i dwie listy:
pierwsza lista zsp zawiera druzyny ,a druga lista wyniki:
Chciałym przypisać do istniejącego słownika wartości z listy wyniki.
Klucz ze słownika pobiera wartośći na podstawie występowania klucza na liście zsp. Listy zsp i wyniki zawierają takie samie ilości elementów bo są to gole strzelone dla drużyn.

zsp = ['Chelsea', 'Manchester City', 'Aston Villa', 'Wolves',
       'Crystal Palace', 'Tottenham', 'Leeds', 'West Ham', 'Southampton',
       'Nottingham', 'Arsenal', 'Newcastle', 'Everton', 'Brighton',
       'Leicester', 'Fulham', 'Manchester Utd', 'Bournemouth', 'Brentford',
       'Liverpool', 'Nottingham', 'Chelsea', 'Tottenham', 'Aston Villa',
       'Bournemouth', 'Crystal Palace', 'Brighton', 'Arsenal', 'Fulham',
       'Southampton', 'Manchester City', 'Everton', 'Newcastle', 'Leeds',
       'Wolves', 'Manchester Utd', 'Liverpool', 'Leicester', 'West Ham',
       'Brentford', 'Leeds', 'Manchester City', 'Chelsea', 'Bournemouth',
       'Manchester Utd', 'Nottingham', 'Arsenal', 'West Ham', 'Aston Villa',
       'Liverpool', 'Brentford', 'Tottenham', 'Crystal Palace', 'Fulham',
       'Everton', 'Wolves', 'Leicester', 'Newcastle', 'Southampton',
       'Brighton', 'Brighton', 'Aston Villa', 'Fulham', 'Manchester Utd',
       'Bournemouth', 'Everton', 'Liverpool', 'Southampton',
       'Manchester City', 'Brentford', 'Newcastle', 'Chelsea', 'Nottingham',
       'Crystal Palace', 'Tottenham', 'Leeds', 'West Ham', 'Leicester',
       'Wolves', 'Arsenal', 'Aston Villa', 'Manchester Utd', 'Chelsea',
       'Arsenal', 'Southampton', 'Newcastle', 'Tottenham', 'Liverpool',
       'West Ham', 'Crystal Palace', 'Everton', 'Leicester', 'Leeds',
       'Bournemouth', 'Manchester City', 'Fulham', 'Nottingham', 'Brentford',
       'Chelsea','Everton']

wyniki = [0, 1, 1, 1, 0, 4, 2, 2, 0, 1, 0, 0, 1, 4, 0, 1, 3, 0, 3, 1, 1, 1,
          0, 2, 0, 2, 2, 4, 2, 1, 1, 1, 0, 0, 0, 1, 2, 1, 0, 2, 1, 3, 2, 0,
          3, 0, 3, 1, 1, 3, 2, 2, 0, 3, 1, 2, 0, 3, 1, 3, 1, 2, 1, 2, 3, 0,
          3, 1, 1, 2, 1, 0, 1, 0, 4, 3, 0, 2, 0, 2, 3, 1, 0, 1, 1, 4, 1, 2,
          1, 2, 0, 2, 4, 3, 2, 1, 2, 2, 2, 3]

Przykładowo chciałbym ,aby tak to wyglądało:

teams = {'Chelsea': 0,1,1...itp, 'Manchester City': 1,1,2...itp}

Z listami nie miałbym problemu ,ale od wczoraj przerabiam słowniki i ciężko jest przypisywać wartości do klucz.
Na listach wykorzystałbym index ze słownika ,sprawdziłym występowanie na liście zsp i poprał metodą append wartości z listy wyniki ,a na słownikach nie jest to takie proste.
Prosiłbym o jakiś przykład.

Pozdrawiam

1
  1. Nie rozumiem, jak ma wyglądać wyjście. Najpierw myślałem, że chcesz słownik teams = {'Chelsea': 0, ''Manchester City': 1, …}, ale jednak nie. Skąd się bierze wartość dla poszczególnego zespołu? To ma być int, lista intów, coś jeszcze innego?
  2. Zainteresuj się dictionary comprehension. Przykład działania:
zespoły = ["abc", "def", "ghi"]
bramki = [1, 3, 0]
słownik = {z: b for z, b in zip(zespoły, bramki)}  # {"abc": 1, "def": 3, "ghi": 0}
0

Tak wygląda odpowiednik danych dla pierwszego klucza.

for i ,r in enumerate(zsp):
    if 'Chelsea' in r:
        print(wyniki[i])

teams = {'Chealsea':0,1,2,0,0,2}
Teraz chciałbym pobawić się ,aby każdy klucz ze słownika otrzymał swoje wartości.
Później dodam kolejne wartości stosując parzystość i nieparzystość na podstawie reszty z dzielenia.
Parzyste występowanie zawsze zwróci gole strzelone.
Nieparzyste występowanie zwróci gole stracone.
Cały zapis jest jak jeden wieli wykazd wyników pomiędzy dwoma drużynami ,a druga lista zawiera wyniki tego meczu.
Dzięki za podpowiedź kompresją słownika i zastosowaniu zipa ,choć na praktycznych przykładach lepiej się to przyswaja.

Pozdrawiam

1

Strasznie ciężko sobie konstruujesz problemy; lepiej myśl w kategoriach: wejście -> co na wyjściu.

0

Jak pobrać resztę wartośći?
Bierzący kod pobiera tylko ostanią wartość ,a nie wszystkie które spełniają warunek.
Podczas print(i) mam numery iteracji spełniające warunek ,ale tylko pobiera ostani,
Czy ktoś mógłby mi pomóc?

for i ,r in enumerate(zsp):
    if list(teams.keys())[0] in r:
        teams[list(teams.keys())[0]] = wyniki[i] 
2

Coś takiego...?

>>> out = defaultdict(list)
>>> for z, w in zip(zsp, wyniki):
...     out[z].append(w)
... 
>>> dict(out)
{'Chelsea': [0, 1, 2, 0, 0, 2], 'Manchester City': [1, 1, 3, 1, 2], 'Aston Villa': [1, 2, 1, 2, 3], 'Wolves': [1, 0, 2, 0], 'Crystal Palace': [0, 2, 0, 0, 2], 'Tottenham': [4, 0, 2, 4, 1], 'Leeds': [2, 0, 1, 3, 4], 'West Ham': [2, 0, 1, 0, 1], 'Southampton': [0, 1, 1, 1, 1], 'Nottingham': [1, 1, 0, 1, 2], 'Arsenal': [0, 4, 3, 2, 1], 'Newcastle': [0, 0, 3, 1, 4], 'Everton': [1, 1, 1, 0, 0, 3], 'Brighton': [4, 2, 3, 1], 'Leicester': [0, 1, 0, 2, 2], 'Fulham': [1, 2, 3, 1, 1], 'Manchester Utd': [3, 1, 3, 2, 1], 'Bournemouth': [0, 0, 0, 3, 3], 'Brentford': [3, 2, 2, 2, 2], 'Liverpool': [1, 2, 3, 3, 2]}
0

@Spearhead

Pięknie
Dziękuję i pozdrawiam.

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