在字典值中搜索字符串并返回新字典

时间:2019-03-06 10:43:46

标签: python python-3.x

我有以下格言

{'returnData': [{'eMail': None,
                 'firstName': 'Peter',
                 'id': '1234',
                 'name': 'Parker'},

                {'eMail': 'lucky@mail.example',
                 'firstName': 'Lucky',
                 'id': '123',
                 'name': 'Luke'},

                {'eMail': 'micky@mail.example',
                 'firstName': 'Micky',
                 'id': '3456',
                 'name': 'Mouse'}],
 'status': {'errorCode': 0,
            'message': None,
            'subErrorCode': None,
            'success': True}}

我将如何在dict中搜索eMailfirstNamename的值,并在新的dict中返回所有找到的匹配项。

例如,我搜索mail.example,它应该只返回两个条目。

3 个答案:

答案 0 :(得分:1)

Python3

解决方案1:

list(filter(lambda profile: '@mail.example' in str(profile['eMail']), data['returnData']))

搜索所有dict值

list(filter(lambda profile: '@mail.example' in str(
    profile.items()), data['returnData']))

解决方案2:

创建搜索功能。

data = {'returnData': [{'eMail': None,
                    'firstName': 'Peter',
                    'id': '1234',
                    'name': 'Parker'},

                   {'eMail': 'lucky@mail.example',
                    'firstName': 'Lucky',
                    'id': '123',
                    'name': 'Luke'},

                   {'eMail': 'micky@mail.example',
                    'firstName': 'Micky',
                    'id': '3456',
                    'name': 'Mouse'}],
    'status': {'errorCode': 0,
               'message': None,
               'subErrorCode': None,
               'success': True}}

def search(search_term, field, data):
    result = []
    for item in data:
        if search_term in str(item[field]):
            result.append(item)

    return result

print(search("@mail.example", "eMail", data['returnData']))

答案 1 :(得分:0)

遍历dict_['returnData']以寻找eMail

dict_ = {'returnData': [{'eMail': None,
                 'firstName': 'Peter',
                 'id': '1234',
                 'name': 'Parker'},

                {'eMail': 'lucky@mail.example',
                 'firstName': 'Lucky',
                 'id': '123',
                 'name': 'Luke'},

                {'eMail': 'micky@mail.example',
                 'firstName': 'Micky',
                 'id': '3456',
                 'name': 'Mouse'}],
 'status': {'errorCode': 0,
            'message': None,
            'subErrorCode': None,
            'success': True}}

for elem in dict_['returnData']:
        print(elem['eMail'])  
  

注意:if elem['firstName']: print(elem['eMail'])仅用于两个   肠

输出

None
lucky@mail.example
micky@mail.example

编辑

使用lists,甚至更好:

firstNames = []
names = []
emails = []

for elem in dict_['returnData']:
    if elem['firstName']:
        firstNames.append(elem['firstName'])
    if elem['name']:
        names.append(elem['name'])
    if elem['eMail']:
        emails.append(elem['eMail'])

print("First Names: {}".format(firstNames))
print("Names: {}".format(names))
print("Emails: {}".format(emails))

输出

First Names: ['Peter', 'Lucky', 'Micky']
Names: ['Parker', 'Luke', 'Mouse']
Emails: ['lucky@mail.example', 'micky@mail.example']

答案 2 :(得分:0)

您可能要在这里使用re模块

import re

d = {'returnData': [{'eMail': None,
                 'firstName': 'Peter',
                 'id': '1234',
                 'name': 'Parker'},

                {'eMail': 'lucky@mail.example',
                 'firstName': 'Lucky',
                 'id': '123',
                 'name': 'Luke'},

                {'eMail': 'micky@mail.example',
                 'firstName': 'Micky',
                 'id': '3456',
                 'name': 'Mouse'}],
 'status': {'errorCode': 0,
            'message': None,
            'subErrorCode': None,
            'success': True}}

out = []
for entry in d['returnData']:
    pattern = 'mail.example'
    email = entry.get('eMail', None)
    if email and re.search(pattern, email):
        out.append(email)
print(out)