code: def _update_targets(vesseldicts, environment_dict):
    
    # Compile a list of the nodes that we need to check
    nodelist = []
    for vesseldict in vesseldicts:
      nodeip_port = vesseldict['node_ip']+':'+str(vesseldict['node_port'])
      if not nodeip_port in nodelist:
        nodelist.append(nodeip_port)
  
    # we'll output a message about the new keys later...
    newidlist = []
    faillist = []
  
    # Clear the list so that the user doesn't target vessels acquired from
    # previous requests when targeting this group
    seash_global_variables.targets['acquired'] = []
    print nodelist
  
    # currently, if I browse more than once, I look up everything again...
    retdict = seash_helper.contact_targets(
      nodelist,
      seash_helper.browse_target,
      environment_dict['currentkeyname'],
      'acquired')
  
    # parse the output so we can print out something intelligible
    for nodename in retdict:
      if retdict[nodename][0]:
        newidlist = newidlist + retdict[nodename][1]
      else:
        faillist.append(nodename)
  
    seash_helper.print_vessel_errors(retdict)
  
    if len(newidlist) == 0:
      print "Could not add any new targets."
    else:
      print "Added targets: "+", ".join(newidlist)
  
    if len(seash_global_variables.targets['acquired']) > 0:
      num_targets = str(len(seash_global_variables.targets['acquired']))
      print "Added group 'acquired' with "+num_targets+" targets"
docs: <Purpose>
      Connects to the nodes in the vesseldicts and adds them to the list
      of valid targets.
  
    <Arguments>
      vesseldicts:
          A list of vesseldicts obtained through
          SeattleClearinghouseClient calls.
  
    <Side Effects>
      All valid targets that the user can access on the specified nodes
      are added to the list of targets.
  
    <Exceptions>
      None
  
    <Returns>
      None