生成字典并不总是有效的

2024-05-20 19:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用for循环(I<;numero_usuarios)自动生成一个字典,键从带有名称的列表中获取,值是用random.randint(1,10)随机生成的,问题是它并不总是生成我想要的数量

例如,我想创建10个用户(通常是10个),它有时会创建7个、8个或9个,但很少创建10个

代码如下

import random

class practica6:

#Create our constructor
    def __init__(self) -> None:
        # Initialize users dictionary
        self.usuarios = {}
        #List of possible names the users can take
        self.nombres = ['Mario', 'Pepe', 'Angel', 'Joaquin', 'Jesus', 'Edson', 'Emilio', 
        'Eli', 'Francisco', 'Sergio', 
        'Erick', 'David', 'Liam', 'Noah', 'Oliver', 'William', 'James', 'Benjamin', 'Lucas', 
        'Henry', 'Alexander', 
        'Mason', 'Michael', 'Ethan', 'Mateo', 'Sebastian', 'Jack', 'Peter', 'Josh', 
        'Patricia', 'Luis', 'Gerardo', 'Carmen']


    def generar_diccionario_usuarios(self, numero_usuarios : int):
        #Generate a dictionary with random names (keys) and random priority (values) keys : 
        #values
        for i in range(numero_usuarios):
            self.usuarios[random.choice(self.nombres)] = random.randint(1, 10)
        #DEBUG : Print our users dictionary
        print(self.usuarios)

#Test app
practica = practica6()
n = 10
print('Usuarios:')
practica.generar_diccionario_usuarios(n)

Tags: selffordictionarynamesdefourrandomusers
3条回答

在字典中,一个键不能出现多次,所有插入已存在键的尝试都将导致覆盖存储值。 random.choice作为具有替换的draw,可以多次返回同一用户。您需要使用random.sample,它在不进行替换的情况下模拟绘图

for nombre in random.sample(self.nombres, numero_usuarios):
    self.usuarios[nombre] = random.randint(1, 10)

这是因为当你一次随机选择一个键时,你的dict中会有重复的键

您可以使用

distinct_names = random.sample(self.nombres, k=numero_usarios)

和一个随机整数列表

values = random.choices(range(1, 11), k=numero_usarios)

然后,您可以通过将这些列表与

self.usuarios =  dict(zip(distinct_names, values))

问题是,有时“random.choice(self.nombres)”会生成相同的名称,因此会忽略, 因此,解决方案是:

import random
class practica6:

#Create our constructor
   def __init__(self) -> None:
       # Initialize users dictionary
       self.usuarios = {}
       #List of possible names the users can take
       self.nombres = ['Mario', 'Pepe', 'Angel', 'Joaquin', 'Jesus', 'Edson', 'Emilio', 
       'Eli', 'Francisco', 'Sergio', 
       'Erick', 'David', 'Liam', 'Noah', 'Oliver', 'William', 'James', 'Benjamin', 'Lucas', 
       'Henry', 'Alexander', 
       'Mason', 'Michael', 'Ethan', 'Mateo', 'Sebastian', 'Jack', 'Peter', 'Josh', 
       'Patricia', 'Luis', 'Gerardo', 'Carmen']


   def generar_diccionario_usuarios(self, numero_usuarios : int):
       #Generate a dictionary with random names (keys) and random priority (values) keys : 
       #values
       for i in range(numero_usuarios):
           name = random.choice(self.nombres)
           while name in self.usuarios.keys():
               name = random.choice(self.nombres)
           self.usuarios[name] = random.randint(1, 10)
       #DEBUG : Print our users dictionary
       print(self.usuarios)

#Test app
practica = practica6()
n = 10
print('Usuarios:')
practica.generar_diccionario_usuarios(n)

谢谢,希望这对我有用

相关问题 更多 >