How do I update a dictionary value having the user choose the key to update and then the new value, in Python?

孤者浪人 提交于 2020-01-04 02:55:20

问题


I am trying to write a program where my brother and I can enter and edit information from our football game rosters to compare teams and manage players, etc. This is my first 'big' project i've tried.

I have a nested dictionary inside a dictionary, I'm able to get the user to create the dictionaries etc. But when i try to have the 'user' (via raw_input) go back to edit them I get stuck. Below i tried to put a simplified version of the code down of what i think is relevant to my error. If I need to put down a full version let me know.

player1 = {'stat1' : A, 'stat2' : 2, 'stat3' : 3} #existing players are the dictionaries 
player2 = {'stat1' : A, 'stat2' : 2, 'stat3' : 3} # containing the name of stat and its value
position1 = {'player1' : player1} # in each position the string (name of player) is the key and
position2 = {'player2' : player2} # the similarly named dict containing the statisics is the value
position = raw_input('which position? ') # user chooses which position to edit
if position == 'position1':
  print position1 # shows user what players are available to choose from in that position
  player = raw_input('which player? ') #user chooses player from available at that position
  if player == player1:
    print player # shows user the current stats for the player they chose
    edit_query = raw_input('Do you need to edit one or more of these stats? ')
    editloop = 0
    while editloop < 1: # while loop to allow multiple stats editing
      if edit_query == 'yes': 
        stat_to_edit = raw_input('Which stat? (If you are done type "done") ')
          if stat_to_edit == 'done': #end while loop for stat editing
            editloop = editloop +1
          else:
            new_value = raw_input('new_value: ') #user inserts new value

# up to here everything is working. 
# in the following line, player should give the name of the
# dictionary to change (either player1 or player2) 
# stat_to_edit should give the key where the matching value is to be changed
# and new_value should update the stastic
# however I get TypeError 'str' object does not support item assignment

            player[stat_to_edit] = new_value #update statistic
      else:  # end loop if no stat editing is wanted
        fooedit = fooedit + 1

of course when i say "should give..." etc I mean to say "I want it to give.."

In summary I want the user to choose the player to edit, choose the stat to edit, then choose the new value


回答1:


The problems seems that after this line

player = raw_input('which player? ')

the player will be the string, containing what the user have typed in, and not the dictionary, like player1. This explains, why Python fails to assign to its part. You can instead write like this:

player = raw_input('which player? ')
if player == 'player1': # these are strings!
  current_player = player1 # this is dictionary!
  ....
  current_player[...] = ... # change the dictionary

Also note, that the Python assignment to a name typically does no copy object, but only adds another name for the same existing object. Consider this example (from Python console):

>>> a = {'1': 1}
>>> a
{'1': 1}
>>> b = a
>>> b
{'1': 1}
>>> b['1'] = 2
>>> b
{'1': 2}
>>> a
{'1': 2}
>>>


来源:https://stackoverflow.com/questions/6805640/how-do-i-update-a-dictionary-value-having-the-user-choose-the-key-to-update-and

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!