如何通过defaultdict过滤?

时间:2018-11-08 10:37:06

标签: python dictionary 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。而且,如果没有给定供应商1密钥的结果,请与其他供应商保持结果。

编辑:所需输出:

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

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

1 个答案:

答案 0 :(得分:0)

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