Как добавить серию словарей случайных чисел в единый список - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь создать список, который содержит словари случайно сгенерированных цветов.Так, например, первый словарь списка будет цвет 0 со значениями 255, 255, 255. Я получаю синтаксическую ошибку с «color {x}», где python говорит, что это должно быть целое число или соединение, но не строка.Удаление части цвета дает мне еще одну ошибку, когда python говорит, что заданный объект не имеет атрибута format.

Это использует pygame 1.9.4 и python 3.7, и я довольно новичок в программировании на python в целом.Я пробовал возиться с частью "color {x}", но у этого предыдущего thread было что-то похожее, что работает для них, поэтому я просто скопировал синтаксис, чтобы посмотреть, смогу ли я заставить его работать.

colors = []
colorLength = len(colors)
for x in range(3):
    colors["color{x}".format(x)]= random.randint(0,255), 
           random.randint(0,255), random.randint(0,255)
    #colors.append()
else:
    print(colorLength)

Я пытаюсь заставить цвета списка содержать 3 словаря (на данный момент планирую расширить список, когда я его заработаю), которые содержат случайно сгенерированный цвет.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Если я правильно понимаю, вы действительно хотите словарь кортежей.Как то так:

import numpy as np
a = {i: tuple(np.random.randint(256, size=3)) for i in range(3)}

print(a)
{0: (65, 168, 140), 1: (193, 85, 66), 2: (28, 25, 7)}
0 голосов
/ 30 января 2019

Вы путаете list с dictionary - список - это просто ... список - индексируемая коллекция вещей.Вам нужен словарь - то, что хранит значение под ключом .Словари создаются: colors = {}.

Другая ошибка, которую вы получаете при использовании str.format () с именованным параметром - вы можете опустить x или исправить его так:

for xxx in range(3):
    # x is the name inside the {x} and it should be replaced by xxx
    colors["color{x}".format( x = xxx)] = ...

если вы просто используете

for xxx in range(3):
    colors["color{}".format(xxx)] = ...

format заменится позиционно .. 1-й {} заполнитель будет заменен значением 1st в format( 1st, 2nd, ...) и т. Д.

Readup:


Фиксированный код:

import random 

colors = {} # create empty dictionary

for x in range(3):
    # random.choices creates k random values from the given iterable in one go
    colors["color{}".format(x)] = random.choices(range(0,256), k =3) 

print(colors) 

Выход:

{'color0': [189, 5, 3], 'color1': [57, 218, 56], 'color2': [64, 150, 255]}

Доку:


Если вам действительно нужны кортежи, выможно использовать tuple( random.choices(range(0,256), k =3) )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...