簡體   English   中英

過濾字典中的項目

[英]Filtering Items in dictionary

我想從一本字典中過濾項目,其中該字典包含另一本字典的項目。 所以,說我有兩個字典的dict1dict2在哪里

dict1  = {
    1:{'account_id':1234, 'case':1234, 'date': 12/31/15, 'content': 'some content'},
    2:{'account_id':1235, 'case':1235, 'date': 12/15/15, 'content': 'some content'}
}
dict2 = {
    1:{'account_id':1234, 'case':1234, 'date': 12/31/15, 'content': 'some different content'},
    2:{'account_id':4321, 'case':4321, 'date': 6/12/15, 'content': 'some different content'},
    3:{'account_id':1235, 'case':1235, 'date': 12/15/15, 'content': 'some different content'}
}

我想匹配 account_id、case 和 date,並將輸出作為第三個字典,其中dict2匹配條目為 1 和 3。

out = {
    1:{'account_id':1234, 'case':1234, 'date': 12/31/15, 'content': 'some different content'},
    2:{'account_id':1235, 'case':1235, 'date': 12/15/15, 'content': 'some different content'}
}

我將如何做到這一點? 我正在使用 Python 3.5

那么,我相信這就是你要找的:

from itertools import count
from operator import itemgetter
# Set the criteria for unique entry (prevents us from needing to write this twice)
get_identifier = itemgetter("account_id","case","date")

# Create a set of all unique items.
unique_entries = set(map(get_identifier, dict1.values()))

# Get all entries that match one of the unique entries
matched_entires = (d for d in dict2.values() if get_identifier(d) in unique_entries)

# Recreate a new dict together with a counter for items.
out = dict(zip(count(1), matched_entires))

有關count()itemgetter()更多信息,請參閱它們各自的文檔。

使用集合和生成器理解可確保最高水平的效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM