我有一個用戶通過的“重要”檢查點串列:
important_checkpoints = ['checkpoint_1', 'checkpoint_2', 'checkpoint_3',
'checkpoint_4', 'checkpoint_5']
術語“重要”的意思是,從用戶可以通過的所有可能的檢查點('checkpoint_1',...,checkpoint_99)中,我只對 中列出的檢查點感興趣important_checkpoints。
此外,我有一本字典,其中包含用戶實際使用的檢查點:
user_checkpoints = {"id_1": "checkpoint_11", "id_2": "checkpoint_3", "id_3": "checkpoint_4",
"id_4": "checkpoint_45", "id_5": "checkpoint_68", "id_6": "checkpoint_1",
"id_7": "checkpoint_1"}
示例解決方案: 現在我想獲取一本字典,告訴我哪個用戶 ID 通過了“重要”檢查點之一:
{"checkpoint_1": [id_6, id_7], "checkpoint_2": [], "checkpoint_3": [id_2], "checkpoint_4": [id_3],
"checkpoint_5": []}
我未完成的解決方案
我能夠找到通過的重要檢查點(此處:),['checkpoint_1', 'checkpoint_3', 'checkpoint_4']但我無法匹配相應的 ID。
activated_checkpoints_by_user = [] # activated_forms_for_user_concerns
for key in important_checkpoints:
if key in list(user_checkpoints.values()):
activated_checkpoints_by_user.append(key)
>> activated_checkpoints_by_user
>> ['checkpoint_1', 'checkpoint_3', 'checkpoint_4']
uj5u.com熱心網友回復:
您基本上希望將字典 use??r_checkpoints 中的值映射回鍵。在 Python 中,沒有直接的方法可以做到這一點,但您可以逐項列出字典并使用回圈來獲得所需的結果:
result_dict ={}
for imp_checkpoint in important_checkpoints:
result_dict[imp_checkpoint]=[user_id for user_id, checkpoint in user_checkpoints.items() if checkpoint == imp_checkpoint]
uj5u.com熱心網友回復:
如果我正確理解了您的問題,這應該可以解決您的問題:
result = {}
for k in important_checkpoints:
result[k] = []
for i,k in user_checkpoints.items():
if k in important_checkpoints:
result[k].append(i)
print(result)
輸出是:
{'checkpoint_1': ['id_6', 'id_7'], 'checkpoint_2': [], 'checkpoint_3': ['id_2'], 'checkpoint_4': ['id_3'], 'checkpoint_5': []}
uj5u.com熱心網友回復:
由于您希望結果中出現所有重要的檢查點,即使它們從未被訪問過,首先創建重要檢查點的預初始化字典,activated_important_checkpoints如下所示。每個的值將是一個空串列[]。
然后僅在該檢查點很重要時迭代user_checkpoints并附加每個用戶標識。您可以使用.activated_important_checkpoints
這是一個幾乎從英文到python的版本:
activated_important_checkpoints = {checkpoint: [] for checkpoint in important_checkpoints}
# {'checkpoint_1': [], 'checkpoint_2': [], ..., 'checkpoint_5': []}
for user, checkpoint in user_checkpoints.items():
if checkpoint in activated_important_checkpoints:
activated_important_checkpoints[checkpoint].append(user)
之后的價值activated_important_checkpoints:
{'checkpoint_1': ['id_6', 'id_7'],
'checkpoint_2': [],
'checkpoint_3': ['id_2'],
'checkpoint_4': ['id_3'],
'checkpoint_5': []}
筆記:
- 的初始化
activated_checkpoints_by_user發生一次,并且是 O(N)。 - 遍歷所有用戶檢查點的下一個回圈發生一次,并且是 O(N)。
- 由于鍵查找對字典的作業方式,字典鍵查找
if checkpoint in activated_checkpoints_by_user為 O(1)。對于串列,它是 O(N)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447799.html
