Python Forum
Checking if the combination of two keys is in a dictionary?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Checking if the combination of two keys is in a dictionary?
#1
Hello,

Hope you are well.

See below in bold, I want check if a key combination of club and year is present in a dictionary and then if it is append the value in [0] to a list but I am having trouble.

Any ideas?

Regards,
MRSENORCHUCK

# dictionary keys will be the (Club)
premier = {}
print()
# open the file
with open(r"C:\AOC_ASL_ASN\Project\League_Table2.csv") as data_file:
# read in the first line containing the headers
headers = data_file.readline()

# for each other line in the file
for line in data_file:
# split each line into components (remove white space from ends of line)
Team,Pos,Pld,HW,HD,HL,HG,HC,AW,AD,AL,AG,AC,W,D,L,G,C,Pts,Champ,Rel,Year = line.strip().split(",")
# insert the data into the dictionary
premier[str(Team),int(Year)] = ((int(Pos), int(Pld), int(HW), int(HD), int(HL), int(HG), int(HC), int(AW), int(AD), int(AL), int(AG), int(AC), int(W), int(D), int(L), int(G), int©,int(Pts),Champ,Rel))


# played list used in calc
Played = []

# go through each key in the dictionary

strTeam = input("Please pick a team: ")

for i in range(1993,2019):
if strTeam, i in premier.keys()
Played.append = premier[strTeam, i][0]


print(Played)


See sample data set
Team,Pos,Pld,HW,HD,HL,HG,HC,AW,AD,AL,AG,AC,W,D,L,G,C,Pts,Champ,Rel,Year
Manchester United,1,42,14,5,2,39,14,10,7,4,28,17,24,12,6,67,31,84,Yes,No,1993
Aston Villa,2,42,13,5,3,36,16,8,6,7,21,24,21,11,10,57,40,74,No,No,1993
Norwich City,3,42,13,6,2,31,19,8,3,10,30,46,21,9,12,61,65,72,No,No,1993
Blackburn Rovers,4,42,13,4,4,38,18,7,7,7,30,28,20,11,11,68,46,71,No,No,1993
Reply
#2
The current implementation does not work because keys in a dict cannot be looked up like that. You could use the namedTuple in the Collections module or try a Numpy Dataframe. If you go down the namedTuple route, it could benefit you to inherit it and write a method to do the search.
Reply
#3
(Dec-03-2019, 10:28 PM)stullis Wrote: The current implementation does not work because keys in a dict cannot be looked up like that. You could use the namedTuple in the Collections module or try a Numpy Dataframe. If you go down the namedTuple route, it could benefit you to inherit it and write a method to do the search.
How would the named tuple approach work?
Reply
#4
Here's an example of what you could do:

from collections import namedtuple

test = namedtuple("test", ["x","y","z"])
x = [test(4,5,6), test(5,6,7)]

for each in x:
    print(x.x)
    print(x.y)
    print(x.z)
Reply
#5
(Dec-03-2019, 10:58 PM)stullis Wrote: Here's an example of what you could do:

from collections import namedtuple

test = namedtuple("test", ["x","y","z"])
x = [test(4,5,6), test(5,6,7)]

for each in x:
    print(x.x)
    print(x.y)
    print(x.z)

Thank you for your reply.

So currently my premier dictionalry has two keys and it has to have two to make the key value unique.

These keys are Team and Year.

Would my best option be to create a new dictionary based on my existing dictionary for a named team?

For example a team like Leeds United dosen't have a year value for 2008 etc
Reply
#6
(Dec-03-2019, 11:12 PM)mrsenorchuck Wrote: So currently my premier dictionalry has two keys and it has to have two to make the key value unique.

These keys are Team and Year.

Would my best option be to create a new dictionary based on my existing dictionary for a named team?

For example a team like Leeds United dosen't have a year value for 2008 etc

It sounds like you need multiple dimensions to your dictionary.
A dictionary is a singular key: value relationship, so you can only use one key in a dictionary.
For instance:
grades = {"Mike": 99, "Sally": 100, "Thomas": 82}
In this dictionary the students' names are the keys and their grades are the values.
So:
print(grades["Mike"])
Gives us:
Output:
99
If we wanted to store multiple grades per student we could make a dictionary of dictionaries, as such:
grades = {"Mike": {"Test": 100, "Quiz": 98, "Homework": 99},
          "Sally": {"Test": 100, "Quiz": 100, "Homework": 100},
          "Thomas": {"Test": 85, "Quiz": 82, "Homework": 79} }
Then we could access any given grade by first the name of the student, then the type of grade, as such:
print(grades["Mike"]["Quiz"])
Which gives us:
Output:
98
For each type of key that you'd like to use, you will need to nest another dictionary. In you case the inner dictionaries should all be the same as shown in this example. I believe you will need three levels of dictionaries.
Try to put some code together based on this. You are more likely to get help on code that you've made and tested, especially if you post all the code using the formatting tools and your results or tracebacks in the case of errors.
Reply
#7
(Dec-04-2019, 02:26 AM)Clunk_Head Wrote:
(Dec-03-2019, 11:12 PM)mrsenorchuck Wrote: So currently my premier dictionalry has two keys and it has to have two to make the key value unique.

These keys are Team and Year.

Would my best option be to create a new dictionary based on my existing dictionary for a named team?

For example a team like Leeds United dosen't have a year value for 2008 etc

It sounds like you need multiple dimensions to your dictionary.
A dictionary is a singular key: value relationship, so you can only use one key in a dictionary.
For instance:
grades = {"Mike": 99, "Sally": 100, "Thomas": 82}
In this dictionary the students' names are the keys and their grades are the values.
So:
print(grades["Mike"])
Gives us:
Output:
99
If we wanted to store multiple grades per student we could make a dictionary of dictionaries, as such:
grades = {"Mike": {"Test": 100, "Quiz": 98, "Homework": 99},
          "Sally": {"Test": 100, "Quiz": 100, "Homework": 100},
          "Thomas": {"Test": 85, "Quiz": 82, "Homework": 79} }
Then we could access any given grade by first the name of the student, then the type of grade, as such:
print(grades["Mike"]["Quiz"])
Which gives us:
Output:
98
For each type of key that you'd like to use, you will need to nest another dictionary. In you case the inner dictionaries should all be the same as shown in this example. I believe you will need three levels of dictionaries.
Try to put some code together based on this. You are more likely to get help on code that you've made and tested, especially if you post all the code using the formatting tools and your results or tracebacks in the case of errors.

Thank you for your reply.

I think my best option is to initally loop through the table and create a list of years "teamyears = []" for the team.

I can then use teamyears along with the club as the basis of filtering.

Regards
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Group List Elements according to the Input with the order of binary combination quest_ 19 1,147 Jan-28-2021, 03:36 AM
Last Post: bowlofred
  Iterating over a dictionary in a for loop - checking code has worked sallyjc81 1 381 Dec-29-2020, 05:14 PM
Last Post: ndc85430
  Adding keys and values to a dictionary giladal 3 465 Nov-19-2020, 04:58 PM
Last Post: deanhystad
  Error while checking for key in Dictionary onenessboy 5 589 Aug-14-2020, 01:06 PM
Last Post: onenessboy
  access dictionary with keys from another and write values to list redminote4dd 6 1,002 Jun-03-2020, 05:20 PM
Last Post: DeaD_EyE
  Drop Keys From Dictionary donnertrud 8 1,043 May-30-2020, 11:39 AM
Last Post: DeaD_EyE
  Problem adding keys/values to dictionary where keynames = "property" and "value" jasonashaw 1 706 Dec-17-2019, 08:00 PM
Last Post: jasonashaw
  Retrieving dictionary keys within with another dictionay bazcurtis 8 1,049 Oct-29-2019, 10:06 PM
Last Post: bazcurtis
  how to get all the possible permutation and combination of a sentence in python sodmzs 1 1,899 Jun-13-2019, 07:02 AM
Last Post: perfringo
  json.dumps to keep dictionary keys batchenr 1 754 May-14-2019, 11:17 AM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020