перебор словарей в цикле for - PullRequest
0 голосов
/ 16 июня 2020

Итак, я должен в основном создать for l oop для словаря, который содержит ключевые значения как один продукт питания, а значения, являющиеся их производителями. То есть для каждого элемента мне нужно создать список производителей, которые будут связаны с ним. На листе Excel производитель должен быть в 1-м столбце, а элементы - в 8-м столбце. Producer_w_coordinates - это не что иное, как список производителей, которые у меня есть.

Например: {'Apple': ['Adam's & Co', 'Fredd ie Co.']}. Это правильный способ go об этом?

item_producer_dict = dict()
item_list
for row_idx in range(3, wb_sheet.nrows): # Uncomment to run over whole sheet

producer = str(wb_sheet.cell(row_idx, 1).value) # 1 FOR COLUMN B
items = str(wb_sheet.cell(row_idx, 8).value) # 8 FOR COLUMN I
producer_list_local = producer.replace(', ',',').split(',')
for row_idx in item_list :
    if producer in producers_w_coordinates:
        item_producer_dict[row_idx] = list(set(producer))

1 Ответ

0 голосов
/ 16 июня 2020

Нет необходимости преобразовывать в set, а затем обратно в list. Пусть set сделает всю работу за вас, если только нет причины, по которой вам явно нужен list.

С проблемой, которую вы описываете, defaultdict звучит как ваше лучшее решение. defaultdict - это dict, который не вызывает KeyError, если мы пытаемся манипулировать им до того, как он будет установлен. Скорее он "по умолчанию" соответствует указанному нами типу. В этом случае мы укажем set.

from collections import defaultdict

item_producer_dict = defaultdict(set)

for row_idx in range(3, wb_sheet.nrows):

    producer = str(wb_sheet.cell(row_idx, 1).value) # 1 FOR COLUMN B
    items = str(wb_sheet.cell(row_idx, 8).value) # 8 FOR COLUMN I
    producer_list_local = producer.replace(', ',',').split(',')
    for row_idx in item_list :
        if producer in producers_w_coordinates:
            item_producer_dict[row_idx].add(producer)

При этом, если это рабочий код, это скорее вопрос для https://codereview.stackexchange.com/.

...