0

在进行一些比较后,我必须从列表中提取值。如果在列表中找到我的值,那么我需要用逗号分隔符连接输出。

下面是我的输入数据集和我编写的代码的快照`

filter = ['abc', 'xyz']

data = [{'type': 'Cust',  'value': '71581742', 'loc': 'abc'}, {'type': 'Cust',  'value': '12345', 'loc': 'xyz'}, {'type': 'Cust',  'value': '76543', 'loc': 'tyu'}]


所以,简而言之,我需要检查“过滤器”中提供的所有值是否都存在于“数据”中。如果找到,我只需要在一行中返回“值”,如下所示:

'71581742','12345'

我尝试使用以下代码:

value1=""
for val in filter:
    value = str([x['value'] for x in data if val in x['loc']])[1:-1]
    value1=value1+','+value
    print(value1)

但是我从中得到的输出是

,'71581742'
,'71581742','12345'

我需要输出为 '71581742','12345'

有人可以帮助我,让我知道我做错了什么

提前致谢

4

2 回答 2

0

试试这个:

values = [x['value'] for x in data if x['loc'] in filter]
print(", ".join(values))

你得到你的原因是,因为你从一个空字符串开始:

value1=""

第一次通过循环并点击:

value1=value1+','+value

你连接一个空字符串,一个逗号和新值,从而得到结果 ,'71581742'

于 2019-08-13T17:31:22.017 回答
0

第一个注意事项:避免覆盖 filter(),这是 Python 的基本函数!!

f = ['abc', 'xyz']

data = [{'loc': 'abc', 'type': 'Cust', 'value': '71581742'},
        {'loc': 'xyz', 'type': 'Cust', 'value': '12345'},
        {'loc': 'tyu', 'type': 'Cust', 'value': '76543'}]

鉴于此,您可以像这样定义自己的过滤器函数。(返回真假)

def data_filter(data, f):
    return data['loc'] in f

您可以将过滤器应用于列表理解,然后用逗号加入结果列表:

res=[d['value'] for d in data if data_filter(d, f)]
print(','.join(res))

使用这种方法,您甚至可以升级 data_filter(),例如添加一个键参数,以便您可以将该函数与任何其他字典键一起使用。

于 2019-08-13T17:58:31.967 回答