Выяснить, присутствует ли элемент в многомерном массиве в Python - PullRequest
4 голосов
/ 02 мая 2010

Я анализирую журнал, содержащий псевдонимы и имена хостов. Я хочу закончить с массивом, который содержит имя хоста и последний использованный псевдоним.

У меня есть следующий код, который создает список только по именам хостов:

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 ]

4 голосов
/ 02 мая 2010

Используйте словарь вместо списка. Используйте имя хоста в качестве ключа и имя пользователя в качестве значения.

3 голосов
/ 02 мая 2010

Просто используйте словарь.

names = {}

while(parsing):
    nick = nick_on_current_line
    host = host_on_current_line   

    names[host] = nick
2 голосов
/ 02 мая 2010
if host in zip(*hostnames)[0]:

или

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