По умолчанию Dict / Sort by min - PullRequest
       14

По умолчанию Dict / Sort by min

0 голосов
/ 26 октября 2018

и заранее благодарю за помощь.Пока у меня есть этот код:

with open("clean_result.csv", "r", encoding="utf-8", errors="ignore") as 
new_data:
reader = csv.reader(new_data, delimiter=',', quotechar='"')
for row in reader:
    if row:
        columns = [row[0], row[1]]
        init_dict.append(columns)

for ean, price in init_dict:
    result[ean].append(price)

И затем я получаю минимальное значение для каждой цены с этой строкой:

maxitems = {ean : min(result[ean]) for ean in result}

Токовый выход: {'8714789828558': '5,51 ',' 3326100000182 ': '15, 00', '3286010016683': '3,93' (...)}


Я хотел бы добавить строку [2] и получитьдополнительная информация, но только для минимальной стоимости.

Желаемый результат: {'8714789828558': '5,51', 'A', '3326100000182': '15, 00 ',' B '' 3286010016683 ':' 3,93 ',' C '(...)}

Я попробовал это:

for row in reader:
    if row:
        columns = [row[0], row[1], row[2]]
        init_dict.append(columns)

for ean, price, desc in init_dict:
       result[ean].append(price)
       result[ean].append(desc)

maxitems = {ean : min(result[ean]) for ean in result}

Но вывод такой.Половина данных отсутствует:

{'8714789828558': 'A', '3326100000182': 'B' '3286010016683': 'C' (...)}

Возможно, я что-то неправильно понимаюпоэтому, пожалуйста, любая помощь приветствуется

1 Ответ

0 голосов
/ 26 октября 2018
from operator import itemgetter
from collections import defaultdict

result = defaultdict(list)

for row in reader:
    if row:
        result[row[0]].append((row[1], row[2]))

minitems = {ean : min(prices, key = itemgetter(0)) for ean, prices in result.iteritems()}
...