我在Python中有一组列表,用于跟踪一些用户的信息:
user_id = [1,2,3,4,5]
user_name = ['bob', 'alice', 'jerry', 'lisa', 'tom']
user_email = ['bob@email.com', 'alice@email.com', 'jerry@email.com', 'lisa@email.com', 'tom@email.com']
...
我想通过信息"y"获取用户信息"x"。在大多数情况下,我会使用字典来进行这个操作以获得恒定的查找时间,但是我不想创建和维护大量的字典。
如果我为上述每一对列表都创建一个字典,那么我就需要:
其中第 i 个元素在每个列表中相互对应。
name:email
email:name
name:id
id:name
email:id
id:email
这些属性已经变得难以管理,而且随着属性数量的增加,它们的增长速度非常快。
我可以让所有东西都映射到用户ID,然后只有2n个字典,但很高兴了解这种用例的更合适的数据结构。
为了说明目前代码是如何实现的:
def get_email_by_user_id(user_id):
return [email for email, uid in zip(user_email, user_id) if uid == user_id][0]
正如你所想象的那样,非常缓慢 :P
id
作为键,并且有字典将用户名映射到id
,或将电子邮件映射到id
。 - Tim Roberts