创建唯一的字典键

问题描述 投票:-7回答:3

The problem

我正在Django中进行电子商务,用户可以在将它们添加到购物车之前选择多个项目,当点击添加到购物车按钮时,我在用户的购物车中使用时间戳作为对象ID。

当点击添加到购物车按钮时,我有一个词典

{"item_id":"qty"}

创建购物车对象就像

{"timestamp":"item_id;qty"}

时间戳用作唯一ID,因此如果需要删除,我可以为购物车的行提供id,如果是,则在后端发送购物车元素的id并从用户的购物车中删除相同的元素宾语

时间戳不是唯一的......进程太快,以至于时间戳保持不变并且不会生成不同的密钥,任何具有不同时间戳的建议都将受到赞赏。

python django python-3.x
3个回答
5
投票

时间戳用作唯一ID,因此如果需要删除,我可以为购物车的行提供id

你正在咆哮错误的树,试图解决一个不适合原始问题的解决方案中的问题;即你有一个XY problem

最简单的解决方案:使用list而不是dict。根据定义,list将具有唯一键。 list的唯一问题是在Web场景中,您可能正在处理两个并行或过时的请求,并且索引可能在到达您的服务器时引用不同的元素。

因此,要使用真正独特,不变的ID,请使用uuid module

from uuid import uuid4

a = [1 ,2 ,3 , 4 , 5]
b = {}
for i in a:
    b[uuid4()] = i

你去,保证独特的ID。


0
投票

如果您希望您的密钥是唯一的并且基于时间,则只需手动递增它们:

import time
key = time.time() * 1000
a = [1 ,2 ,3 , 4 , 5]
b = {}
for i in a:
    b[key] = i
    key += 1

print(b)

-1
投票

如何使用datetime模块

from datetime import datetime

for i in a:
    b[datetime.now()] = i

编辑:

也许更好的方法是将其添加到时间戳中。一种方法是在混合中添加UUID。

import uuid

for i in a:
    b[timestamp() + uuid.uuid4()] = i

但我可能会稍微伸展一下。只是一个建议。

© www.soinside.com 2019 - 2024. All rights reserved.