TransWikia.com

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

Stack Overflow на русском Asked by Stud200891 on January 18, 2021

Задача состоит в следующем:
Создать функцию с данными для записи в файл 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 и их значения согласно условию?

One Answer

По всем правилам искусства: 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}

Answered by Stanislav Volodarskiy on January 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP