Создание нескольких классов из списка списков - PullRequest
0 голосов
/ 17 октября 2019

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

list = [['SYDNEY', 'to', 'SAN FRANCISCO'], ['SYDNEY', 'from' 'AUCKLAND'], ['HONG KONG', 'to', 'BEIJING'], ['TOKYO' 'to', 'SEOUL'], ['SAN FRANCISCO', 'from', 'LONDON'], ['SYDNEY', 'to', 'SHANGHAI'], ['KL', 'to', 'SYDNEY']]

У меня также есть класс под названием 'City'

class City:

    def __init__(self, name):
        self.cityName= name
        self.to_or_from = []
        self.to_or_from_city = []

Как я могу использоватьlist для создания объектов для каждого города. Например, для Сиднея объект должен выглядеть следующим образом:

cityName = Sydney
to_or_from = ['to', 'from', 'to']
to_or_from_city = ['SAN FRANCISCO', 'AUCKLAND', 'SHANGHAI']

Обратите внимание, что нет необходимости учитывать KL в объекте Sydney, однако объект KL должен содержатьSydney следующим образом:

cityName = KL
to_or_from = ['to']
to_or_from_city = ['SYDNEY']

Другими словами, если у нас есть ['City1', 'to', 'City2'], тогда объект City2 не должен содержать 'from' City1.

1 Ответ

1 голос
/ 17 октября 2019

Вопрос : Как я могу использовать _list для создания class City объекта для каждого города

_list = [['SYDNEY', 'to', 'SAN FRANCISCO'], 
         ['SYDNEY', 'from', 'AUCKLAND'], 
         ['HONG KONG', 'to', 'BEIJING'], 
         ['TOKYO', 'to', 'SEOUL'], 
         ['SAN FRANCISCO', 'from', 'LONDON'], 
         ['SYDNEY', 'to', 'SHANGHAI'], 
         ['KL', 'to', 'SYDNEY']
        ]

class City:
    def __init__(self, name):
        self.cityName= name
        self.to_or_from = []
        self.to_or_from_city = []

    def append(self, relation):
        c1, r, c2 = relation
        self.to_or_from.append(r)
        self.to_or_from_city.append(c2)

    def __str__(self):
        return 'City:{}, {}'.format(self.to_or_from, self.to_or_from_city)

cities = {}
for relation in _list:
    name = relation[0]
    cities.setdefault(name, City(name)).append(relation)

for name, city  in cities.items():
    print('{}:{}'.format(name, city))

Выход :

SYDNEY:City:['to', 'from', 'to'], ['SAN FRANCISCO', 'AUCKLAND', 'SHANGHAI']
HONG KONG:City:['to'], ['BEIJING']
TOKYO:City:['to'], ['SEOUL']
SAN FRANCISCO:City:['from'], ['LONDON']
KL:City:['to'], ['SYDNEY']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...