Создание случайного значения в словаре при циклическом перемещении по списку и добавлении - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно создать словарную структуру в следующем формате.

list_1 = [1,2,3,4,5]

list_2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

list_3 = random.sample(list_2 , random.randint(0,len(list_2))

L oop в качестве len (list_1) и необходимо l oop с использованием list_2, а затем с использованием созданной случайной выборки используя list_3, присваивая каждое значение list_3 в качестве значения во внутреннем словаре ниже при выполнении итерации.

* Требуемый формат словаря:

my_dict = { 1: { 1: a, 
                 2:b, 
                 3,c},
             2: { 1: 'd',
                  2: 'g'},
             3: {1, 'e',
                 2, 'f',
                 3, 'g'}
                .....
               }*

Мой код:

list_1 = [1,2,3,4,5]

list_2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

list_4= []

j= 1

while i <= len(list_1):

    list_3 = random.sample(list_2 , random.randint(0,len(list_2))

    for k in list_3:

        my_dict= { i: { j: k, 
                      }
                 }

        j+=1

    i+=1

    list_3 = random.sample(list_2 , random.randint(0,len(list_2))
    list_4.append(my_dict)

Значение j должно увеличиваться после каждой итерации list_3 и продолжать добавлять новый ключ jth + значение (k) После того, как l oop заканчивается list_3, должен быть создан другой пример списка (list_3), и то же самое повторяется в новом ключе ih и добавляется в словарь.

Я не получаю требуемый результат и нужна помощь, если кто-то может исправить код.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 апреля 2020

Итак, у вас есть список keys и список values, и вы хотите создать словарь с одной записью для каждого key, где значение для каждого key - это словарь со случайным выбор из values в качестве значений и последовательных цифровых клавиш, начиная с 1.

keys = [1, 2, 3, 4, 5]
values = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

result = {
    k: {n: v 
        for n, v in enumerate(random.sample(values, random.randint(0, len(values))), 1)
    } 
    for k in keys }

Это:

  • определяет словарь;
    result= {}
  • с записью для каждой клавиши k в keys;
    result= {k: {} for k in keys}
  • , причем каждый словарь имеет ключи и значения из перечисления, начинающегося с 1;
    {n: v for n, v in enumerate([], 1)}
  • со значениями случайной выборки из values;
    random.sample(values, _)
  • длиной от 0 до всех элементов в values.
    random.sample(random.randint(0, len(values)))

И Python позволяет вам просто превратить перечисление в диктовку напрямую:

result = {
    k: dict(enumerate(random.sample(values, random.randint(0, len(values))), 1))
    for k in keys }
0 голосов
/ 24 апреля 2020

Вы можете попробовать это:

    import random
    list_1 = [1,2,3,4,5]
    list_2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    for i in list_1:
        list_3 = random.sample(list_2 , random.randint(0,len(list_2)))
        my_dict[i]=dict(enumerate(list_3,1))
    print(my_dict)
0 голосов
/ 24 апреля 2020

Вы перезаписываете свой my_dict на каждой итерации l oop. Вам нужно только добавить новый поддикт с ключом i:

list_1 = [1,2,3,4,5]
list_2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
my_dict = {}
for i in list_1:
    list_3 = random.sample(list_2 , random.randint(0,len(list_2)))
    my_dict[i] = dict(enumerate(list_3, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...