Quelle est la meilleure structure de données pour le stockage d'un ensemble de quatre (ou plus) des valeurs?

Dire que j'ai la suite variables et de ses correspondants values qui représente un record.

name = 'abc'
age = 23
weight = 60
height = 174

Veuillez noter que le value peuvent être de différents types (string, integer, float, de référence-à-tout-autre-objet, etc).

Il y aura beaucoup de records (au moins >100 000 habitants). Chaque record sera unique lorsque l'ensemble de ces quatre variables (en fait son values) sont mis ensemble. En d'autres termes, il n'existe pas de record avec tous les 4 values sont les mêmes.

Je suis en train d'essayer de trouver une structure de données efficace dans Python qui me permettra de stocker et d') récupérer records fondée sur l'un quelconque de ces variables dans log(n) temps de la complexité.

Par exemple:

def retrieve(name=None,age=None,weight=None,height=None) 
    if name is not None and age is None and weight is None and height is None:
        /* get all records with the given name */
    if name is None and age is not None and weight is None and height is None:
        /* get all records with the given age */
    ....
    return records

La façon dont le retrieve devrait être appelé est comme suit:

retrieve(name='abc') 

Ci-dessus doit retourner [{name:'abc', age:23, wight:50, height=175}, {name:'abc', age:28, wight:55, height=170}, etc]

retrieve(age=23) 

Ci-dessus doit retourner [{name:'abc', age:23, wight:50, height=175}, {name:'def', age:23, wight:65, height=180}, etc]

Et, j'ai peut-être besoin d'ajouter un ou deux de plus variables à cet enregistrement dans le futur. Par exemple, disons, sex = 'm'. Ainsi, la retrieve fonction doit être évolutive.

Donc en bref: Est-il une structure de données dans Python qui permettra storing a record avec n nombre de columns (nom, âge, sexe, poids, taille, etc) et retrieving records basé sur (un) de l' column dans logarithmic (ou, idéalement, constant - O(1) look-up de temps) de la complexité?

  • Pourriez-vous veuillez justifier l'-1? C'est une véritable question de programmation.
  • Peut-être cela vous aidera - wiki.python.org/moin/TimeComplexity ?
  • Pourquoi pas à l'aide de sql pour cela? Semble plus approprié. Python a la prise en charge intégrée pour sqlite.
  • SQL sera lent, OP mentionne de temps en complexité, il n'est probablement pas très heureux d'être lié par les I/O.
  • Cette question est au sujet de fournir une mise en œuvre d'une telle structure de données, ou est-il quant à savoir si ou non un prêt-à-utiliser de l'exécution?
  • aussi regarder pandas.DataFrame
  • J'ai besoin d'essayer et d'éviter tout db opérations ici qui peut ralentir les choses..
  • Je suis à la recherche d'un construire-dans le type de données qui peuvent fournir cette. Si aucune accumulation dans la structure de données est disponible, alors j'ai besoin d'utiliser la combinaison de l'existant, des types de données intégrés à venir avec un définis par l'utilisateur structure de données qui a regarder le temps < log(n) le temps de la complexité.
  • Merci pour le partage du temps de la complexité de la page. Bonne référence. Merci!
  • vous êtes les bienvenus, je ne connaissais pas avant, afin de sera certainement venir dans maniable pour moi aussi! 🙂