Как отфильтровать дефолтный приговор? - PullRequest
0 голосов
/ 08 ноября 2018

Я учу Python, чтобы пройти через данные. У меня есть входной файл CSV, который я организовал по умолчанию.

Это выглядит так:

{
 '1234' : [('1,60', 'text', 'supplier1')],
 '3456' : [('1,98', 'another text', 'supplier2')],
 ['1,54', 'text again', 'supplier1'],
 '709' : [('2,90', 'again', 'supplier2')] 
}

То, что я хотел бы, это расставить приоритеты для кортежей, содержащих, например, "supplier1". Если для одного и того же ключа есть результаты для поставщика 1 и 2, то остается только поставщик 1. И если нет результатов для данного ключа для поставщика1, сохраните результаты с другими поставщиками.

РЕДАКТИРОВАТЬ: желаемый выход:

{
 '1234' : [('1,60', 'text', 'supplier1')],
 '3456' : ['1,54', 'text again', 'supplier1'],
 '709' : [('2,90', 'again', 'supplier2')] 
}

Как лучше всего это сделать? Я не хочу оставлять только поставщик1 результат

1 Ответ

0 голосов
/ 08 ноября 2018

Поскольку defaultdict является подклассом dict, мы можем использовать обычный словарь списков (в то же время я исправил некоторые синтаксические ошибки, которые я считаю опечатками):

d = {'1234' : [('1,60', 'text', 'supplier1')],
     '3456' : [('1,98', 'another text', 'supplier2'),
               ('1,54', 'text again', 'supplier1')],
     '709' :  [('2,90', 'again', 'supplier2')]}

Затем вы можете использовать словарь с пользовательской функцией для выполнения вашей задачи:

def get_data(x):
    for tup in x:
        if tup[-1] == 'supplier1':
            return [tup]
    return x

res = {k: get_data(v) for k, v in d.items()}

{'1234': [('1,60', 'text', 'supplier1')],
 '3456': [('1,54', 'text again', 'supplier1')],
 '709':  [('2,90', 'again', 'supplier2')]}
...