为了账号安全,请及时绑定邮箱和手机立即绑定

如何过滤defaultdict?

如何过滤defaultdict?

临摹微笑 2021-08-11 17:22:34
我正在学习 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 有相同key 的结果,只保留supplier1。如果供应商 1 的给定密钥没有结果,则将结果保留给其他供应商。编辑:所需的输出:{ '1234' : [('1,60', 'text', 'supplier1')], '3456' : ['1,54', 'text again', 'supplier1'], '709' : [('2,90', 'again', 'supplier2')] }最好的方法是如何做到这一点?我不想只保留供应商 1 结果
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-08-11
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信