簡體   English   中英

Python 字典:根據列表中的匹配值返回鍵

[英]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.

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