Здесь я "открыл", что конструктор item['new']=["" for j in range(len(iu))] выдает список, который ничуть не короче, чем item['new']=["WoW" for j in range(len(iu))] И весь этот пост наполнен упражнениями, ...рассуждениями пытливого туповатого самоучки, который завидует тем, кому преподы все подают на блюдечке...
Начнем со стиля. Если бы у меня были бы практические занятия в ВУЗе, то хорошие преподаватели в многочисленных примерах просто бы использовали этот конструктор... и при этом говорили бы , что это "хороший стиль программирования"... Я бы запомнил все "между делом". И мне бы не пришлось тратить полтора часа на все нижеприведенные изыскания... Хорошая академическая школа - это преподы, которые передают тебе свои "открытия"... Много хороших преподов - огромная экономия времени... и никакого когнитивного диссонанса...
Вот очевидный, вроде бы, вариант¶
Когда для заполнения списка используется метод .append(), то к списку последовательно добавляются новые члены.
Очевидно, что эта процедура и уопрядочивает список.
Если у нас словарь, состоящий из списков, то можно перебрать один образцовый список ('url'), и для каждого элемента этого списка получить индекс (j - порядковый номер).
Затем можно последовательно присоединить к новому пустому списку новые элементы .append()
item={'url':['url1','url2','url3','url4','url5',],
'oth':['oth1','oth2','oth3','oth4','oth5',]}
item['new']=[]
iurl=item['url'] #the list of url
for surl in iurl: # iterate 'url'
j=iurl.index(surl) # take index of eash surl
item['new'].append(j)
item
Так, да не так - лучше бы сразу задать список определенной длины¶
Однако, где гарантия, что процессор переберет "образцовый" список в правильной последовательности? Оказывается в Python возможны такие варианты, в часности, когда мы используем асинхронный поток... например, библиотеку Twisted... У меня даже есть конкретный пример.
При повторении вот этого примеера Скачал Python-Web-Crawler и сразу же запустил ¶
Я обнаружил, что последовательность записей в выходном файле у меня существенно отличалась от оригинала.
Потому решил "дунуть на воду" при конструировании pipelines в Scrapy. Поскольку мне лень разбираться в тонкостях работы def process_item(self, item, spider), а самое главное, используются итераторы, который перебирает НЕупорядоченную (по определению) последовательность, и таких итераторов много, то надженее другой подход.
- Выбираем "образцовый" список и вычисляем его длину.
- Создаем новый список такой же длинны с элементами Null
- Все, списки синхронизированы, теперь можно вырезать из элементов "образцового" любые фрагменты и вставлять их в новый.
Upgrade: Вот здесь я только-что изобрел детский трехколесный велосипед. Обидно конечно. Но надеюсь использовать этот пост, как пример для анализа особенностей человеческого мышления
iu=item['url']
iu[-1], iu.index(iu[-1]) #Вспоминаем про последний элемент списка
len(iu) # Вспоминаем про встроенную функцию
item['new']=[]
for i in range(len(iu)):
item['new'].append(i)
item['new']
Пример автозаполнителя листа из документации
A compact way to process all or part of the elements in a sequence and return a list with the results.
result = ["0x%02x" % x for x in range(6) if x % 2 == 0]
... generates a list of strings containing even hex numbers (0x..) in the range from 0 to 255. The if clause is optional. If omitted, all elements in range(256) are processed.
result
item['new']=[]
item['new']=["%s"% j for j in range(len(iu))]
item['new']
item['new']=["None" for j in range(len(iu))]
item['new']
Оказывается, что можно задать вот такой список из пустых строк
item['new']=[]
item['new']=["" for j in range(len(iu))]
item['new']
item['new']=[]
item['new']=["WoW" for j in range(len(iu))]
item['new']
Вот он - конструктор списка, создаем новый элемент словарю и тут же его заполняем Вовами¶
item['supernew']=["WoWa" for j in range(len(iu))]
А теперь вспомню, что читал про такие конструкторы, но не запомнил... потом обратил внимание на примеры... а вот теперь вспомнил про азы ... попробуем просто создать новый список в словаре:
item['supernew']
Вот он какой - этот новый словарь:
item
help(iu)
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий