Самый быстрый способ поиска и редактирования значений в списке словарей - PullRequest
1 голос
/ 03 марта 2020

Представьте, что у меня есть список таких словарей:

[{'artifactID': 8047.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8301.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8374.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8641.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8969.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'}
]

В этом списке более миллиона словарей. Я хотел бы найти комбинации memberID и artifactID, и, если комбинация существует, добавьте некоторые значения к существующим ключам в словаре resource_launch.

Например: если я ищу комбинацию artifactID=8969 и memberID=1, я бы хотел, чтобы эта запись обновлялась в списке словарей следующим образом:

[{'artifactID': 8047.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8301.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8374.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8641.0,
  'memberID': 1,
  'resource_launch': {'key1':'value1','key2':'value2','key3':'value3'},
 {'artifactID': 8969.0,
  'memberID': 1,
  'resource_launch': {'key1':['value1','value4'],'key2':['value2','value5'],'key3':['value3','value6']}
]

Если комбинация не существует, я бы хотел добавить ее в список словарей. .

Как мне быстро достичь этого, учитывая, что этот список будет содержать более миллиона словариков? Прямо сейчас я просто добавляю каждую запись, не проверяя, существует ли запись, и это занимает очень много времени.

Любая помощь будет очень признательна.

Вот мой стартер код, который занимает слишком много времени и не достигает того, что я хочу:

finalJSON = []
for memberID in tqdm(artifactsTimespent['memberID'].unique()):
    temp_artifactsTimespent = artifactsTimespent[artifactsTimespent.memberID==memberID]
    for artifactID in temp_artifactsTimespent['artifactID'].unique():
        temp_artifactsTimespent = temp_artifactsTimespent[temp_artifactsTimespent.artifactID==artifactID]

        temp_resourceLaunchData = resourceLaunchData[resourceLaunchData.member_id==memberID]
        temp_resourceLaunchData = temp_resourceLaunchData[temp_resourceLaunchData.artifact_id==artifactID]

        temp_artifactsContentData = artifactsContentData[artifactsContentData.member_id==memberID]
        temp_artifactsContentData = temp_artifactsContentData[temp_artifactsContentData.artifact_id==artifactID]

        temp_artifactRevisions = artifactRevisions[artifactRevisions.artifactid==artifactID]

        memberArtifactData = {}
        memberArtifactData['memberID'] = memberID
        memberArtifactData['artifactID'] = artifactID

        memberArtifactData['resource_launch'] = temp_artifactsContentData['content_data']
        finalJSON.append(memberArtifactData)
...