2016-02-26 2 views
0

Я довольно новичок в python, и сейчас я пытаюсь выполнить упражнение, которое, похоже, не сработает.Python dictionary - проблема с списком (2.7.XX)

В основном у меня есть длинный текст (.txt), содержащий сообщение электронной почты. Теперь от меня прочитать документ и список всех адресов электронной почты (которые я могу получить право)

name = raw_input("Enter file:") 
if len(name) < 1 : name = "file.txt" 
handle = open(name) 
for line in handle: 
    email = line.strip() 
if email.startswith('From: '): 
    name = email.split() 
    print name 

Выход из этого является многопрофильным список линии с 2-х частей в линии.

['From:', '[email protected]'] 
['From:', '[email protected]'] 
['From:', '[email protected]'] 
['From:', '[email protected]'] 
['From:', '[email protected]'] 

Теперь моя проблема заключается в том, что я должен поставить только те адреса электронной почты в словарь и иметь счетчик рядом с ним, например,

[email protected] 5 

Так что теперь я добавил петлю к код с функцией

name = raw_input("Enter file:") 
if len(name) < 1 : name = "file.txt" 
handle = open(name) 
for line in handle: 
    email = line.strip() 
if email.startswith('From: '): 
    name = email.split() 
    print name 
for names in name: 
    count[names] = count.get(names,0) + 1 
    print count 

.get() на данный момент я получаю полный список и выход ниже:

{'From:': 1} 
{'From:': 1, '[email protected]': 1} 

Как я могу получить только электронный адрес [email protected] в словаре? Кажется, что я не могу получить полный список в словаре, и я получаю добавленное «От», которое мне не нужно. Затем я попробую написать остальные, чтобы напечатать самый большой счет в словаре, который тогда станет моим желаемым результатом.

Я застрял на этом какое-то время, и мне нужно, к сожалению, сохранить его простым и плюс минус функции, которые я использовал. Я попытался осмотреться в Интернете, и здесь, но ничего, что я пробовал, до сих пор помогает мне. Я довольно новичок в этом, поэтому я сожалею, если исправление очевидно

Заранее спасибо.

ответ

0
lst = (['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'] 
) 

emails = {} 
for i in lst: 
    email = i[1] 
    if email in emails.keys(): 
     emails[email] += 1 
    else: 
     emails[email] = 1 
print emails 

>>> {'[email protected]': 5} 

Добавьте найденные письма в списке, то перебрать его, или вы можете сделать это в один проход

name = raw_input("Enter file:") 
if len(name) < 1 : name = "file.txt" 
handle = open(name) 

emails = {} 
for line in handle: 
    email = line.strip() 
    if email.startswith('From: '): 
     name = email.split() 
     if name[1] in emails.keys(): 
      emails[name[1]] += 1 
     else: 
      emails[name[1]] = 1 

print emails 
+0

К сожалению, не поможет мне, мне нужно, чтобы получить информацию от моей «имени» переменной (информации вы положить как lst) –

+0

@ShaunSmit see the edit – PYPL

0

Вот более кратким решение с использованием списковых.

lst = (['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
['From:', '[email protected]'], 
) 

unique_set = set([x[1] for x in lst]) 

emails = {} 
for i in unique_set: 
    emails[i] = len([x for x in lst if x[1] == i]) 

print emails 

В приведенной выше коде я первый создаю коллекцию уникальных записей в списке, проверив второй пункт в почтовых кортежах т.е. х [1]. Питон набор делает это за вас. Когда у меня есть эта коллекция, я фильтрую список ввода и подсчитываю количество записей в исходном списке, используя метод len в результирующем списке. Надеюсь, это полезно.

0

open() возвращает файл-объект и чаще всего используется с двумя аргументами: open (имя файла, режим).

f = open('filename', 'r')#In your case you are reading from the file. 

    for line in f: 
      print line, 

Перед петли вы можете установить все ваши условия, чтобы начать читать с «From:»

Смежные вопросы