弄清楚元素是否存在于python中的多维数组中

时间:2010-05-01 20:44:12

标签: python arrays multidimensional-array

我正在解析包含昵称和主机名的日志。我想最终得到一个包含主机名和最新使用的昵称的数组。

我有以下代码,它只在主机名上创建一个列表:

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
# ['foo@google.com', 'bar@hotmail.com', 'hi@to.you']

我认为最终会得到以下内容:

# [['foo@google.com', 'John'], ['bar@hotmail.com', 'Mary'], ['hi@to.you', 'Joe']]

我的问题是找出主机名是否存在于这样的列表中

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])

是否有任何简单的解决方法,或者我应该尝试不同的方法?我总是可以有一个包含对象或结构的数组(如果在python中有这样的东西),但我更喜欢解决我的数组问题。

3 个答案:

答案 0 :(得分:4)

使用dictionary代替列表。使用主机名作为密钥,使用用户名作为值。

答案 1 :(得分:3)

只需使用字典。

names = {}

while(parsing):
    nick = nick_on_current_line
    host = host_on_current_line   

    names[host] = nick

答案 2 :(得分:2)

if host in zip(*hostnames)[0]:

if host in (x[0] for x in hostnames):