【问题标题】:How to reset unique method in Python Faker如何在 Python Faker 中重置唯一方法
【发布时间】:2022-02-08 15:27:41
【问题描述】:

我正在使用 Faker 库来模拟我正在构建的开源应用程序的重量训练数据 (https://github.com/TheNewThinkTank/Fitness-Tracker), 该模拟 (https://github.com/TheNewThinkTank/Fitness-Tracker/blob/main/src/simulate_data.py) 的一部分是从列表中选择练习。每个选择的练习每次锻炼只能出现一次,我通过使用Faker() 库中Faker() 中的unique 方法来保证这一点。当我模拟一次锻炼时,这很好用。然而,当我尝试模拟不止一种锻炼时,我遇到了faker.exceptions.UniquenessException: Got duplicated values after 1,000 iterations。 尝试在每次迭代后重置unique 调用,但努力寻找正确的语法(fake.unique(reset=True) 给了我TypeError: 'UniqueProxy' object is not callable)。这是我尝试过的(重现错误的最小示例):

from faker import Faker
from faker.providers import DynamicProvider

fake = Faker()

chest_exercises_provider = DynamicProvider(
    provider_name="chest_exercises",
    elements=["benchpress", "flys", "pullovers", "dips"],
)
fake.add_provider(chest_exercises_provider)

for workout in range(2):
    workout_chest_exercises = [fake.unique.chest_exercises() for _ in range(3)]  # <----- UniquenessException HERE !!

查看了I need to generate 1000 unique first name In Python,它与I need to generate 1000 unique first name In Python 相似,但地址确保唯一性,而不是重置unique 方法调用。 有没有办法在每次迭代后通过 for 循环重置 unique ?或任何其他解决方法(例如,使用random.sample 而不是Faker 进行练习选择)?

单次锻炼的模拟数据结构如下:

{
  "date": "1994-11-28",
  "split": "back",
  "exercises": {
    "dead row": [{ "set no.": 1, "reps": 17, "weight": "5 kg" }],
    "chinups": [
      { "set no.": 1, "reps": 9, "weight": "92 kg" },
      { "set no.": 2, "reps": 11, "weight": "27 kg" },
      { "set no.": 3, "reps": 16, "weight": "85 kg" },
      { "set no.": 4, "reps": 19, "weight": "22 kg" },
      { "set no.": 5, "reps": 4, "weight": "65 kg" }
    ],
    "seated row": [
      { "set no.": 1, "reps": 19, "weight": "11 kg" },
      { "set no.": 2, "reps": 7, "weight": "24 kg" },
      { "set no.": 3, "reps": 10, "weight": "38 kg" },
      { "set no.": 4, "reps": 9, "weight": "70 kg" },
    ]
  }
}

【问题讨论】:

    标签: python python-3.x list-comprehension simulation faker


    【解决方案1】:

    您可以使用 .clear() 方法。
    Have a look at the docs.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 2015-11-29
      • 1970-01-01
      • 2019-03-10
      • 2019-05-04
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多