list or dictionary

Steve D'Aprano steve+python at pearwood.info
Tue Sep 20 20:27:01 EDT 2016


On Wed, 21 Sep 2016 04:04 am, Ganesh Pal wrote:

> I am on python 2.7 and Linux
> 
> I have the stdout in the below form , I need to write a function to get
> hostname for the given id.
> 
> 
> Example:
> 
>>>> stdout
> 'hostname-1 is array with id 1\nhostname-2 is array with  id 2\nhostname-3
> is array with id 3\n'
> 
> 
> def get_hostname(id)
>        return id
> 
> what's a better option here
> 
> 1. store it in list and grep for id and return
> 2. store it in dict as key and value i.e hostname = { 'hostname1': 1} and
> return key
> 3. any other simple options.


Why don't you write a function for each one, and see which is less work?

# Version 1: store the hostname information in a list as strings

hostnames = ['hostname-1 is array with id 1', 
             'hostname-2 is array with id 2',
             'hostname-842 is array with id 842']

def get_hostname(id):
    for line in hostnames:
        regex = r'(.*) is array with id %d' % id
        mo = re.match(regex, line)
        if mo is not None:
            return mo.group(1)
    raise ValueError('not found')


# Version 2: store the hostname information in a dict {hostname: id}

hostnames = {'hostname1': 1, 'hostname2': 2, 'hostname842': 842}

def get_hostname(id):
    for key, value in hostnames.items():
        if value == id:
            return key
    raise ValueError('not found')


# Version 3: use a dict the way dicts are meant to be used

hostnames = {1: 'hostname1', 2: 'hostname2', 842: 'hostname842'}

def get_hostname(id):
    return hostnames[id]








-- 
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.




More information about the Python-list mailing list