我正在尝试将每个字典键与列表中的值进行比较:
order = {
u'custom_attributes_desc': {u'text': u'Food truck', u'name': u'Bob', u'email': u'bob@yahoo.com'},
u'account_id': 12345,
u'state_desc': u'open',
u'start_dt': u'2013-07-25 15:41:37',
u'end_dt': u'2013-07-25 19:41:37',
u'product_nm': u'foo',
u'transaction_id': 12345,
u'product_id': 1111
}
match = ['transaction_id', 'account_id', 'product_nm']
not_matched_keys = [key_match for key_order, key_match in zip(order.keys(),match) if key_order != key_match]
结果我得到了:
not_matched_keys
['transaction_id', 'account_id', 'product_nm']
但我想看看
[]
因为匹配的键在字典中。
答案 0 :(得分:3)
如果您要列出从match
中取得的 not 字典中的密钥,请使用列表理解:
not_matched_keys = [key for key in match if key not in order]
您的代码创建了3对,match
中每个元素之一,order
中有3个任意键。如果这三个任意键碰巧不等于match
中的3个值,则它们都包含在您的输出中:
>>> order = {u'custom_attributes_desc': {u'text': u'Food truck', u'name': u'Bob', u'email': u'bob@yahoo.com'}, u'account_id': 12345, u'state_desc': u'open', u'start_dt': u'2013-07-25 15:41:37', u'end_dt': u'2013-07-25 19:41:37', u'product_nm': u'foo', u'transaction_id': 12345, u'product_id': 1111}
>>> match = ['transaction_id', 'account_id', 'product_nm']
>>> list(zip(match, order.keys()))
[('transaction_id', 'end_dt'), ('account_id', 'product_id'), ('product_nm', 'transaction_id')]
答案 1 :(得分:1)
你也可以在这里使用filter()
。
>>> filter(lambda x: x not in order, not_matched_keys)
[]