[英]create dictionary of values based on matching keys in list from nested dictionary
[英]Python Dictionary: Return keys based on matching values in list
我有一本字典,其中鍵是唯一名稱,值是非唯一名稱列表。 對於領域知識,鍵是 Tableau 工作簿,值是工作簿連接到的表的列表。
我想要做的是為每個鍵返回至少具有三個匹配值的每個其他鍵。 這樣做基本上可以讓我通過使用相同的表找到重疊數據的工作簿。
目前,我可以通過執行以下操作找到與特定值匹配的所有鍵:
keys = [key for key, value in intersect_dict.items() if 'VOLUME_DIMENSION' in value]
keys
values = [value for key, value in intersect_dict.items() if 'VOLUME_DIMENSION' in value]
values
鍵的輸出是:
['(SAN) STORAGE GROUP INVENTORY AND CAPACITY',
'(SAN) STORAGE GROUP INVENTORY AND CAPACITY V2',
'SAN INVENTORY AND CAPACITY']
值的輸出是:
[['VOLUME_DIMENSION',
'EXTENDED_DATA',
'VOLUME_HISTORY_CAPACITY_FACT',
'HOST_DIMENSION',
'STORAGE_DIMENSION',
'DATE_DIMENSION'],
['STORAGE_DIMENSION',
'DATE_DIMENSION',
'VOLUME_DIMENSION',
'HOST_DIMENSION',
'VOLUME_HISTORY_CAPACITY_FACT',
'EXTENDED_DATA'],
['VOLUME_HISTORY_CAPACITY_FACT',
'HOST_DIMENSION',
'EXTENDED_DATA',
'DATE_DIMENSION',
'STORAGE_DIMENSION',
'VOLUME_DIMENSION']]
有沒有一種可能的方法可以讓我基本上做同樣的事情,除了
if 'VOLUME_DIMENSION' in value
if values in value match 3 times or more
我有嗎?
如果需要更多信息,請告訴我。
Edit1:以下是請求的輸入字典摘錄:
{'(SAN) STORAGE GROUP INVENTORY AND CAPACITY': ['VOLUME_DIMENSION',
'EXTENDED_DATA',
'VOLUME_HISTORY_CAPACITY_FACT',
'HOST_DIMENSION',
'STORAGE_DIMENSION',
'DATE_DIMENSION'],
'(SAN) STORAGE GROUP INVENTORY AND CAPACITY V2': ['STORAGE_DIMENSION',
'DATE_DIMENSION',
'VOLUME_DIMENSION',
'HOST_DIMENSION',
'VOLUME_HISTORY_CAPACITY_FACT',
'EXTENDED_DATA'],
請求的輸出類似於:
{'(SAN) STORAGE GROUP INVENTORY AND CAPACITY': workbook1, workbook7, workbook8}
顯示為值的“工作簿”將是具有三個或更多與該鍵匹配的值的工作簿。
編輯 2:對不起,錯誤的數據格式解釋。 試圖在這里澄清這一點。
d = {
'item1': ['A', 'B', 'C'],
'item2': ['A', 'B', 'C', 'D'],
'item3': ['A', 'C', 'D'],
'item4': ['B', 'C', 'D', 'E'],
'item5': ['A', 'B', 'C'],
'item6': ['A', 'B', 'C', 'E'],
}
Results = {
'item1': ['item2', 'item5', 'item6']
'item2': ['item1', 'item5', 'item6']
}
在上面的例子中,d 將是我的字典形式的整體數據集,而結果是我想要的輸出。 所以它可以讓我定位哪些項目正在共享數據。 或者在這種情況下,共享信件。
我會使用set
:
d = {
'item1': ['A', 'B', 'C'],
'item2': ['A', 'B', 'C', 'D'],
'item3': ['A', 'C', 'D'],
'item4': ['B', 'C', 'D', 'E'],
}
search_items = {'A', 'B', 'C'}
keys = [key for key, value in d.items() if len(search_items & set(value)) >= 3]
print(keys)
values = [value for key, value in d.items() if len(search_items & set(value)) >= 3]
print(values)
輸出:
['item1', 'item2']
[['A', 'B', 'C'], ['A', 'B', 'C', 'D']]
要獲取共享三個或更多項目的所有密鑰,您可以執行以下操作:
common_items = [
(search_key, key, set(search_values) & set(values))
for search_key, search_values in d.items()
for key, values in d.items()
if search_key != key and len(set(search_values) & set(values)) >= 3
]
print(common_items)
[('item1', 'item2', {'C', 'B', 'A'}),
('item2', 'item1', {'C', 'B', 'A'}),
('item2', 'item3', {'C', 'D', 'A'}),
('item2', 'item4', {'C', 'D', 'B'}),
('item3', 'item2', {'C', 'D', 'A'}),
('item4', 'item2', {'C', 'D', 'B'})]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.