Как объединить атрибуты похожих функций в Python - PullRequest
2 голосов
/ 07 января 2012

У меня есть текстовый файл, содержащий атрибуты Street и Page.Улицы могут появляться на нескольких страницах, вот пример того, как выглядит мой текстовый файл:

Улица Страница

StreetA 3

StreetA 4

StreetA 5

StreetB 21

StreetB 22 * ​​1017 *

Используя Python, я пытаюсь объединить как дороги в одну записьс каждой соответствующей страницей для этой дороги, объединенной в единый атрибут.Вот пример того, как я хочу, чтобы мой текстовый файл выглядел:

Улица Страница

StreetA 3, 4, 5

StreetB 21, 22 * ​​1029 *

Если кто-нибудь подскажет мне, как это сделать с помощью Python, я был бы очень признателен

Ответы [ 2 ]

4 голосов
/ 07 января 2012

Вы можете использовать словарь, отображающий названия улиц в списки, например:

streets = {}
for line in records:
    street, space, page = line.partition(' ')
    if street not in streets:
        streets[street] = []
    streets[street].append(page)

Затем вы можете просмотреть словарь и вывести результаты.

3 голосов
/ 07 января 2012

Взгляните на collections.defaultdict:

import collections
streets = collections.defaultdict(list)
with open('a_street_page.txt') as f:
    for line in f:
        street_name, number = line.split()
        streets[street_name].append(number)

Что делает defaultdict, так это вызывает фабрику, данную его конструктору, когда вы обращаетесь к ключу, который еще не существует, и присваивает результат этому ключу. Это исключает необходимость проверки, существует ли ключ. Ваш сценарий - именно то, для чего defaultdict.

...