Reputation: 387
I am parsing a log containing nicknames and hostnames. I want to end up with an array that contains the hostname and the latest used nickname.
I have the following code, which only creates a list over the hostnames:
hostnames = []
# while(parsing):
# nick = nick_on_current_line
# host = host_on_current_line
if host in hostnames:
# Hostname is already present.
pass
else:
# Hostname is not present
hostnames.append(host)
print hostnames
# ['[email protected]', '[email protected]', '[email protected]']
I thought it would be nice to end up with something along the lines of the following:
# [['[email protected]', 'John'], ['[email protected]', 'Mary'], ['[email protected]', 'Joe']]
My problem is finding out if the hostname is present in such a list
hostnames = []
# while(parsing):
# nick = nick_on_current_line
# host = host_on_current_line
if host in hostnames[0]: # This doesn't work.
# Hostname is already present.
# Somehow check if the nick stored together
# with the hostname is the latest one
else:
# Hostname is not present
hostnames.append([host, nick])
Are there any easy fix to this, or should I try a different approach? I could always have an array with objects or structs (if there is such a thing in python), but I would prefer a solution to my array problem.
Upvotes: 4
Views: 2505
Reputation: 906
Just use a dictionary instead.
names = {}
while(parsing):
nick = nick_on_current_line
host = host_on_current_line
names[host] = nick
Upvotes: 3
Reputation: 837916
Use a dictionary instead of a list. Use the hostname as the key and the username as the value.
Upvotes: 4
Reputation: 523154
if host in zip(*hostnames)[0]:
or
if host in (x[0] for x in hostnames):
Upvotes: 2