Поскольку Python3.6 существует метод choices
из модуля random
.
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import random
In [2]: random.choices(
...: population=[['a','b'], ['b','a'], ['c','b']],
...: weights=[0.2, 0.2, 0.6],
...: k=10
...: )
Out[2]:
[['c', 'b'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['c', 'b']]
И люди также упоминали, что есть numpy.random.choice
, которые поддерживают весы, НО не поддерживают 2d массивы и т. Д.
Итак, вы можете получить все, что захотите (см. обновление) с помощью встроенного random.choices
, если у вас есть 3.6.x Python .
UPDATE: As @roganjosh , random.choices
не может возвращать значения без замены, как упоминалось в docs :
Вернуть a
k
(g15)И блестящий ответ @ ronan-paixão гласит, что
numpy.choice
имеет аргументreplace
, который управляет этим поведением.
Расширьте свой сериализатор, чтобы включить поле страны, подобное этому
class StatesDetailSerializer(ModelSerializer):
country = serializers.PrimaryKeyRelatedField(queryset=countries.objects.all())
class Meta:
model = states
fields= ( 'country', ** plus all the fields you want **)
depth = 1
note: не используйте __all__
для полей. Всегда лучше указывать, какие поля вы хотите сериализовать (чтобы избежать потенциальных уязвимостей в вашем приложении)