Генерация словаря со случайными ключами и значениями по заданному условию

Задача состоит в следующем: Создать функцию с данными для записи в файл json. Она должна создавать и возвращать словарь со случайным количеством ключей (не менее 5 но не более 20 ключей). Ключи - уникальные случайные строки длиной в 5 символов из строчных букв английского алфавита (можно с повторениями символов). Значения: или целое число в диапазоне от -100 до 100, или число типа float в диапазоне от 0 до 1, или True/False. Выбор значения должен быть равновероятным, т. е. вероятность того, что значение будет целым, такая же, как и вероятность того, что будет типа float или типа bool.

я сгенерировал ключи:

def create_json_key():
    json_key = [chr(random.randint(ord('a'), ord('z'))) for _ in range(5)]
    return "".join(json_key)

и финальную функцию:

def create_randome_dict():
    new_dict = {}

    return new_dict

а как сделать кол-во этих ключей от 5 до 20 и их значения согласно условию?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

По всем правилам искусства: random.choice(string.ascii_lowercase) для случайных слов, random.choice и lambda для выбора одного из трёх вариантов значения, random.choice для логических значений, dict comprehension для словаря.

import pprint
import random
import string


def random_key():
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(5))


def random_value():
    return random.choice([
        lambda: random.randint(-100, 100),
        lambda: random.uniform(0, 1),
        lambda: random.choice([False, True])
    ])();
    

def random_dict():
    return {random_key(): random_value() for _ in range(random.randint(5, 20))}


pprint.pprint(random_dict())

Результат:

{'juqjq': 0.22354539670175022,
 'lfvpz': 16,
 'nnjry': 0.9879120349690252,
 'tjmey': 0.8362708395652476,
 'vquxd': -84,
 'xpmck': True,
 'ynqvy': 0.6540820906502444,
 'yovac': False,
 'ysuml': False}
→ Ссылка