update values in list based on dictionary - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: update values in list based on dictionary (/thread-18978.html) |
update values in list based on dictionary - bunti - Jun-08-2019 Im quite new to python and struggling on this. Any help would be much appreciated please I have a dictionary as follows: teams -> {'42': 'arsenal', '48': 'chelsea', '43': 'Liverpool', '49': 'Man City', '24': 'Wolves'} I have a a file of rows which one i split into a list looks like below: ['Hex', 'Team', 'League', 'Won League'] ['0xDEFK', 'arsenal', 'EPL', 'Yes'] ['0x1E56', 'chelsea', 'EPL', 'Yes'] ['0xFDC0', 'liverpool', 'EPL', 'No'] ['0x76YJ', 'Man City', 'EPL', 'Yes'] ['0xAB7J', 'Wolves', 'EPL', 'No'] I want to be able to loop through above rows and update the second column "Team" with the number of that team from the "teams" dictionary ie EXAMPLE 1: ['0xDEFK', 'arsenal', 'EPL', 'Yes'] WOULD BECOME 42 because key for arsenal is 42: ['0xDEFK', '42', 'EPL', 'Yes'] EXAMPLE 2: ['0x1E56', 'chelsea', 'EPL', 'Yes'] WOULD BECOME 48 because key for chelsea is 48: ['0x1E56', '48', 'EPL', 'Yes'] I've something like below but not having much luck, what am i doing wrong? Is there a easier way to do this? Thanks in advance: with open('info_output.txt', 'r') as info_outputfile: for line in info_outputfile: l = line.split('|') #info = [Hex, Team, League, WonLeague] newlist = [] for element in info: newlist.append ((element[0], dictionary [element[1]], element[4], element[3])) print newlistThe error i get when i run this script is:
RE: update values in list based on dictionary - Yoriz - Jun-08-2019 I suggest the following improvements
RE: update values in list based on dictionary - DeaD_EyE - Jun-09-2019 Quote:I have a dictionary as follows: So you iterate over the text file, line by line and split the fields. You want to lookup the second field "Team" in the values of a dictionary. This is the problem. Exchange the keys with values in your dictionary and then the lookup is much easier: >>> teams = {'42': 'arsenal', '48': 'chelsea', '43': 'Liverpool', '49': 'Man City', '24': 'Wolves'} >>> teams {'42': 'arsenal', '48': 'chelsea', '43': 'Liverpool', '49': 'Man City', '24': 'Wolves'} >>> {v:k for k,v in teams.items()} {'arsenal': '42', 'chelsea': '48', 'Liverpool': '43', 'Man City': '49', 'Wolves': '24'} >>> teams = {v:k for k,v in teams.items()} >>> teams {'arsenal': '42', 'chelsea': '48', 'Liverpool': '43', 'Man City': '49', 'Wolves': '24'} >>> teams['arsenal'] '42' >>> teams[' arsenal '] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: ' arsenal ' >>> teams.get(' arsenal ', 'Team not found') 'Team not found' >>> teams.get('arsenal', 'Team not found') '42' >>> RE: update values in list based on dictionary - perfringo - Jun-10-2019 Another possibility is to be creative with indexing without need to convert dictionary. 'Get index of needed value in list of dictionary values and find key with same index in list of dictionary keys': >>> d = {1: 'ham', 2: 'eggs', 3: 'bacon'} >>> value = 'eggs' >>> [*d.keys()][[*d.values()].index(value)] # instead of *d.keys() one may use *d 2This way it is possible to have non-hashable values but still find corresponding key: >>> d = {1: ['ham'], 2: ['eggs'], 3: ['bacon']} >>> value = ['bacon'] >>> [*d.keys()][[*d.values()].index(value)] 3NB! If there are several equal values this will return first one encountered. Follow-up edit: so one can utilize this something like following: >>> dct = {'1': 'one', '2': 'two', '3': 'three'} >>> lst = [ ... ['one', 'uno'], ... ['two', 'dos'], ... ['three', 'tres'] ... ] >>> for row in lst: ... row[0] = [*dct][[*dct.values()].index(row[0])] ... >>> lst [['1', 'uno'], ['2', 'dos'], ['3', 'tres']] |