If i write HockeyMatch[row[0]].append(row[3])
i correctly get the list of hockey matches with their last points won, for example Chicago-Minnesota [4, 2, 0, 3]
, because row[0]
is the name of the hockey game and row[3]
is the list of last games points won by Chicago.
My goal is to also add the tournament name
(it's row[1]
) and date
(it's row[2]
) to it, so I get this:
{('Chicago-Minnesota', 'NHL', 12/27/ 2022): [4, 2, 0, 3]
I tried to do this, writing like this:
HockeyMatch[ row[0],row[1],row[2] ].append(row[3])
The problem though is i get this Chicago-Minnesota, NHL, 27.12.2022, [4]
. As you can see, [4]
is the last point conquered in the list [4, 2, 0, 3].
Instead if I try to write HockeyMatch[row[0]].append(row[3])
, I get correctly [4, 2, 0, 3]
, but obviously without date and tournament, so Chicago-Minnesota [4, 2, 0, 3]
How can I correctly print the list of games with date
(is row[2]
), tournament
(is row[1]
) and last points
won (is row[3]
)? I would like to get this {('Chicago-Minnesota', 'NHL', 12/27/2022): [4, 2, 0, 3]
(and other hockey matchs)
HockeyMatch = {}
conn_test = sqlite3.connect('database.db')
cursor_test = conn_test.cursor()
my = cursor_test.execute('''SELECT Next.ClubHome||"-"||Next.ClubAway, Next.Tournament, Next.Date, MatchResults.ScoreHome
FROM Next
INNER JOIN MatchResults
ON Next.ClubHome = MatchResults.ClubHome;''')
for row in my.fetchall():
if row[0] not in HockeyMatch:
HockeyMatch[ row[0],row[1],row[2] ] = []
HockeyMatch[ row[0],row[1],row[2] ].append(row[3])
print(HockeyMatch)
Example database
NEXT
| ClubHome | ClubAway | Tournament | Date |
---------------------------------------------
| Chicago | Minnesota | NHL | 27.12|
| Arizona | Los Angeles| NHL | 27.12|
| Dallas | Vegas Gold | NHL | 27.12|
MATCHRESULTS
To connect to the example in the question, here I only select Chicago who are in ClubHome and select their points. I'm not interested in ClubAway
| ClubHome | ClubAway | Tournament | Date | ScoreHome | ScoreAway
--------------------------------------------------------------------
| Chicago | Toronto | NHL | 27.12| 1 | 2
| New York | Vegas Gold | NHL | 27.12| 2 | 3
| Dallas | Minnesota | NHL | 27.12| 0 | 1
| Chicago | Buffalo Sab| NHL | 27.12| 2 | 0
and other matchs...
CodePudding user response:
Change
if row[0] not in HockeyMatch:
to
if (row[0], row[1],row[2]) not in HockeyMatch:
When you change the key to a tuple, you have to search for the tuple with in
.
You can simplify this by using collections.defaultdict()
or dict.setdefault()
.
for row in data:
HockeyMatch.setdefault((row[0],row[1],row[2]), []).append(row[3])
print(HockeyMatch)