如何通过 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 结果
由于 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')]}
我正在学习 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 结果
由于 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')]}