簡體   English   中英

如果鍵值的值是單獨列表的成員,則無法有效地從字典中提取鍵

[英]Having trouble efficiently extracting key from a dict if key value's value is member of separate list

假設我下達命令:

import collections  
collections.OrderedDict([('great_key', {'keyword': {'blue', 'yellow'}}), ('super_key', {'keyword': {'lock', 'door'}})])

potential_matches列表: [red, red, blue, one]

我需要填寫兩個列表:
correct_key = []incorrect_match = [] correct_key = [] incorrect_match = []

如果潛在的比賽是在字典的關鍵之一的關鍵字,則其關鍵進去correct_key ,否則的話進去incorrect_match

該示例的結果應為:
correct_key = [great_key]incorrect_match = [red, red, one] correct_key = [great_key] incorrect_match = [red, red, one]

這是我嘗試過的:

correct = []  
incorrect = []  
for word in potential_matches:
    for key, value in ordered_dict.items():
        if word in value["keyword"] and word not in correct:
            correct.append(word)
        elif word not in value["keyword"] and word not in correct and word not in incorrect:
            incorrect.append(word)  

這是行不通的,似乎也不有效。

不能是必須保留順序的bc集合,並且重復項以及列表中的多個項都可以。
不應一眼看到比賽就返回它,因為作為比賽的dict的所有項目都應該在最終列表中。

本質上,所有不匹配的剩余單詞都應簡單地轉到其他列表。

完成這項工作的最有效(最易讀)方法是什么?

注意:我之前曾問過類似的問題,盡管在這種情況下,情況和答案都要求使用python集,因為項目是唯一的,或者是關鍵字而不是鍵。

基於運行您的代碼,我相信沒有匹配項。

>>> for key in f:
...   print(f[key])
... 
{'keywords': {'blue', 'yellow'}}
{'keywords': {'door', 'lock'}}

接着:

>>> for key in f:
...  v = f[key]
...  for b in v:
...   print(v[b])
... 
{'blue', 'yellow'}
{'door', 'lock'}
>>> for key in f:
...  for b in v:
...   for c in v[b]:
...    print(c)
... 
door
lock
door
lock

問題是您兩次使用關鍵字。 更改keywords在第二次迭代進行keywords2

暫無
暫無

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

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