如何通过 defaultdict 进行过滤?

How to filter through a defaultdict?

我正在学习 python 浏览数据。我有一个 CSV 输入文件,我将其组织为 defaultdict。

看起来像这样:

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

我想要的是优先包含例如 "supplier1" 的元组。如果 supplier1 和 2 的相同键有结果,则只保留 supplier1。如果 supplier1 的给定键没有结果,则与其他供应商保持结果。

编辑:所需输出:

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

最好的方法是什么?我不想只保留 supplier1 结果

由于 defaultdictdict 的子类,我们可以假设一个规则的列表字典(同时,我已经修复了一些我认为是打字错误的语法错误):

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')]}