Python 动态生成具有唯一名称的词典条目
我正在尝试动态生成单元格。每个单元格都有一个名称,定义为字典的键。该值是一个类的实例,包含三个参数(强度、智能、能量)Python 动态生成具有唯一名称的词典条目,python,python-3.x,Python,Python 3.x,我正在尝试动态生成单元格。每个单元格都有一个名称,定义为字典的键。该值是一个类的实例,包含三个参数(强度、智能、能量) 随机导入 类别单元格: 定义初始(自我、能量、力量、智力): 自我能量=能量 自我力量=力量 自我智力 单元格={} k=1 当k
随机导入
类别单元格:
定义初始(自我、能量、力量、智力):
自我能量=能量
自我力量=力量
自我智力
单元格={}
k=1
当k<100时:
key=“a”+str(k)
打印(“生成单元格:+键)
cells[key]=Cell(random.randint(1100)、random.randint(1100)、random.randint(1100))
k+=1#生成单元
我的问题是名字。这段代码对于第一代单元格来说已经足够好了,但是当我需要制作更多的单元格时,由于名称冲突,新的单元格可以覆盖旧的单元格
是否有方法生成随机但唯一的单元格名称以避免此类冲突?我试着创建一个以“a”开头的新名字,这个名字的最低数字还不存在。然而,在我的整个程序中,细胞都会死亡。我的方法只是填补这些空白,这将很难确定单元格来自哪一代。您可以使用python的库
简单示例(脱离上下文):
将uuid导入为uuidlib
uuid=str(uuidlib.uuid4())
就你而言:
导入uuid
随机输入
类别单元格:
定义初始(自我、能量、力量、智力):
自我能量=能量
自我力量=力量
自我智力
单元格={}
k=1
当k<100时:
key=str(uuid.uuid4())
打印(“生成单元格:+键)
cells[key]=Cell(random.randint(1100)、random.randint(1100)、random.randint(1100))
k+=1#生成单元
您可以尝试使用此函数生成随机名称
import random
def random_string(min_size, max_size):
import string
return ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=random.randint(min_size, max_size)))
random_string(7, 15)
这会产生如下输出:
'AvkyCzlN9ggPr'
如果您再次运行,它可能会给出'FBPXy5a4Ib'
此外,除了能量、强度和智能之外,您还可以在单元格类中添加版本
/生成
字段。可以添加计数器以获取当前版本,并在每次更新单元格时增加版本
根据您的需求,您可以使用它删除旧单元格,或将其作为版本历史记录保存。
要删除旧单元格,只需使用random\u string()
例如:
some_dict = {}
randomstr = random_string(7, 15)
some_dict[random_str] = some_cell(randomstr)
推翻
some_updated_cell = some_cell.update() # decide to increment your version? upto you.
# If you keep the randomstr same it will override the dict key, else it will not override and you can make (randomstr +"-"+ str(version)) as the key of dict.
some_dict[some_updated_cell.get_randomstr] = some_updated_cell
不覆盖并跟踪生成
version = 1 # build a method or autoincrement version.
key = randomstr + "-" + str(version)
然后您可以执行key.split(“-”)
从'AvkyCzlN9ggPr-1'
获取密钥和版本
另一种替代方法是使用字典值作为对象列表。因此,您可以将其附加到列表中,而不是替换字典值
some_dict[randomstr] = []
some_dict[randomstr] = [*some_dict[randomstr], newObject]
要访问最新一代,只需执行以下操作
some_dict[random_str][-1] # to access the last element of list
如果这不能解决您的问题,请留下评论,我将进行相应更新:)查看uuid库。如果密钥是现有密钥,您可以在每次迭代中进行检查。我认为他还希望能够跟踪每个密钥的生成。我可能错了,因为我根本不明白他想要什么。
some_dict[random_str][-1] # to access the last element of list