@dreameddd

Как задать вес определённому элементу списка Python?

Добрый вечер, как сделать вес для каждого предмета в списке? Один раз нашёл нужную информацию по этому поводу, но по истечению времени потерял её и найти сейчас уже не могу. (В Google, Хабр и т.д.)

У меня есть код:
items = [
    "item1",
    "item2",
    "item3"
]
rand_items = random.choices(items, weights=[25, 25, 50], k=1)[0]
print(rand_items)

Но меня не устраивает, что weights нужно задавать в определённом порядке, как сделать вес по типу:
items = [
    ["item1", 25],
    ["item2", 25],
    ["item3", 50]
]
rand_items = random.choices(...)
print(rand_items)

Чтобы внутри элементов (item1, item2, item3) был их вес?
  • Вопрос задан
  • 661 просмотр
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Может, как-то так?
items = [
    ["item1", 30],
    ["item2", 20],
    ["item3", 50]
]
weights = [i[1] for i in items]
rand_items = random.choices(items, weights=weights, k=1)[0]
print(rand_items)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
yupiter7575
@yupiter7575
Python программист
Не очень понял что вам надо...
Вы можете создать словарь:
items = {
'item1':25,
'item2':25,
'item3':25
}

И обращаться по ключу и значению.
Еще вы можете создавать обьекты на основе класса:
class Item():
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight
    def __repr__(self):
        return {'name':self.name, 'weight':self.weight}

items = [
Item('item1', 25),
Item('item2', 25),
Item('item3', 25)
]

print(items[0]['name']) #item1

Если вам нужно что-то другое, напишите в комментариях, разберемся
Ответ написан
@Drill
Со словарем удобнее:
items = {
'item1':25,
'item2':25,
'item3':50
}

rand_items = random.choices(list(items.keys()), weights=list(items.values()))[0]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы