首页 > 解决方案 > python uuid 没有给我唯一的标识符?

问题描述

我在python中有这个函数,它读取一个字典,应该循环多次,然后给我一组唯一的ID到一个字典中。

import uuid
import time

def generate_cluster_group(template: dict, number: int):
    for i in range(number):
        time.sleep(1)
        if i == 0:
            instance = template
            id_ = uuid.uuid4()
            instance['id'] = str(id_)
            virtualInstances = [template]
        else:
            ninstance = template
            id_ = uuid.uuid4()
            ninstance['id'] = str(id_)
            virtualInstances.append(ninstance)
            
    return virtualInstances
sample_template = {'id': 'none'}

result = generate_cluster_group(sample_template, 3)

### desired result
result = [{'id': 'fe918527-5f27-4333-a8ec-887d755a4002'},
          {'id': '8b97fc31-2e01-4949-8eca-954583f4b8fe'},
          {'id': '5fb021e8-d15d-453c-a8c0-9327e7c88634'}]

但我最终得到了相同的 id 重复

actual_result = [{'id': 'fe918527-5f27-4333-a8ec-887d755a4002'},
          {'id': 'fe918527-5f27-4333-a8ec-887d755a4002'},
          {'id': 'fe918527-5f27-4333-a8ec-887d755a4002'}]

我误解了 uuid 函数的工作原理吗?

标签: pythonuuid

解决方案


你在你的功能中犯了几个错误。可以简化为:

def generate_cluster_group(template: dict, number: int):
    virtualInstances = []
    for _ in range(number):
        time.sleep(1)
        ninstance = dict(template)
        ninstance['id'] = str(uuid.uuid4())
        virtualInstances.append(ninstance)
            
    return virtualInstances

推荐阅读