通过内部字典中多个键的值过滤Python字典

2024-04-25 18:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典如下:

transactions = {'366184179': {'start_ffe_event': '2019-12-25 19:40:47.886',
                      'tx_code': '366184179',
                      'celular': '57310XXXXXXX',
                      'AID': '121140',
                      'ffe_value': '2000.0',
                      'ITEL_type': 'ITELFlow',
                      'OfferId': '87253',
                      'partnerId': '10280',
                      'msg_ffe_event': '2019-12-25 19:40:48.858',
                      'ffe_message': 'SUCCESS response from connector',
                      'XML_event': '2019-12-25 19:40:48.858',
                      'XML_response': 'Transaction successful'},
              '366236151':{'start_ffe_event': '2019-12-26 09:01:06.594',
                           'tx_code': '366236151',
                           'celular': '573002003288',
                           'AID': '121410',
                           'ffe_value': None,
                           'ITEL_type': 'DataSmsActivationFlow',
                           'OfferId': '87461',
                           'partnerId': '10280',
                           'msg_ffe_event': None,
                           'ffe_message': None,
                           'XML_event': None,
                           'XML_response': None}
                      ...}

inners键msg_ffe_event, ffe_message, XML_evento and XML_response可以是None

我想筛选所有符合此条件的密钥。你知道吗

我试着:

check_keys = ['msg_ffe_event', 'ffe_message', 'XML_event', 'XML_response']
element = lambda elem: all(e is None for e in [elem[key] for key in elem.keys() if key in check_keys])
list(filter(element, transactions))

当我使用element(transactions[*valid_key*])时,element函数可以工作,但是这里使用filter函数会产生一个错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-60-d7b33ef30b22> in <module>
      1 check_keys = ['msg_ffe_event', 'ffe_message', 'XML_event', 'XML_response']
      2 element = lambda elem: all(e is None for e in [elem[key] for key in elem.keys() if key in check_keys])
----> 3 list(filter(element, transactions))
      4 #element(transactions['366930594'])

<ipython-input-60-d7b33ef30b22> in <lambda>(elem)
      1 check_keys = ['msg_ffe_event', 'ffe_message', 'XML_event', 'XML_response']
----> 2 element = lambda elem: all(e is None for e in [elem[key] for key in elem.keys() if key in check_keys])
      3 list(filter(element, transactions))
      4 #element(transactions['366930594'])

AttributeError: 'str' object has no attribute 'keys'

我想要的输出是:

{'366236151':{'start_ffe_event': '2019-12-26 09:01:06.594',
                               'tx_code': '366236151',
                               'celular': '573002003288',
                               'AID': '121410',
                               'ffe_value': None,
                               'ITEL_type': 'DataSmsActivationFlow',
                               'OfferId': '87461',
                               'partnerId': '10280',
                               'msg_ffe_event': None,
                               'ffe_message': None,
                               'XML_event': None,
                               'XML_response': None}
                             ,...}

Tags: keyinnoneeventmessageforresponsecheck
2条回答

这里有另一种方法来实现你想要的,这将符合你的预期输出。你知道吗

全部无

check_keys = ['msg_ffe_event', 'ffe_message', 'XML_event', 'XML_response']

def all_keys_none(dictionary, keys):
    return all([dictionary[key] is None for key in keys])

none_keys = {key: value for key, value in transactions.items() if all_keys_none(value, check_keys)}

print(none_keys)

有几件事要你查。你知道吗

此解决方案与您的答案之间的区别在于,结果将具有与您开始时相同的字典结构。你知道吗

它可能是你想要的,也可能不是你想要的,但是它是你想要的输出。你知道吗

列表(过滤器(元件,事务处理.值()))

tks@Blorgbeard公司

相关问题 更多 >