Je travaille avec deux ensembles de données hiérarchiques qui contiennent une relation complexe (je n'utilise pas SQL) et ils ne partagent pas leur primaire clés de recherche. Nous utilisons ce processus pour garder les deux ensembles de données synchronisés.Python: J'ai une liste double clé, qui est l'objet de stockage le plus efficace pour retreival
Chaque jeu de données est actuellement stocké en tant que dictionnaire avec la clé de l'ensemble de données en tant que clé du dictionnaire. Une fois la relation complexe déterminée, je stocke la clé de l'autre ensemble de données en tant qu'attribut dans l'autre. Cela a créé le besoin de créer des fonctions auxiliaires étranges pour ensuite suivre certaines des relations parent-enfant. Je me demandais s'il y aurait une méthode plus efficace ou plus rapide pour cette folie puisque je dois actuellement passer les deux ensembles de données aux fonctions de traitement qui ont besoin d'analyser les relations.
exemples:
leftdataset = {'10000': { 'key': '10000', 'fkey':'asdf', 'parent':'10001'},
'10001': { 'key': '10001', 'fkey':'qwer', 'parent':''},}
rightdataset= {'asdf': { 'key': 'asdf', 'fkey':'10000', 'parent':'qwer'},
'qwer': { 'key': 'qwer', 'fkey':'10001', 'parent':''},
Pour trouver ce parent fkey
je dois: Je jouais
fkey = dataset[dataset['10000']['parent']]['fkey']
avec l'idée de présenter un tuple des paires de clés, puis la recherche de la clé dont j'ai besoin dans ce comme:
keys = [('10000', 'asdf'), ('10001', 'qwer')]
def find_key(key, keyset):
for keypair in keys:
if key in keypair:
k1, k2 = keypair
if k1 == key:
return k2
else:
return k1
Mais cela semble encore moins EF ficient que ce que je fais maintenant. Suis-je juste en train de me frayer un chemin?
recherche aléatoire dans un dictionnaire sera beaucoup plus efficace que recherche aléatoire dans une liste , sauf si vous pouvez organiser les choses par un index. Je voudrais juste encapsuler les deux ensembles de données dans une classe et cacher le désordre là. –