我在生成假城市时遇到了一些问题,而不仅仅是城市。
from faker import Faker
from collections import defaultdict
import pprint
fake = Faker('en_US')
pp = pprint.PrettyPrinter(indent=4)
user_details = defaultdict(dict)
list_user_details = []
for i in range(0, 3):
user_details["first_name"] = fake.first_name()
user_details["address"]["city"] = fake.city()
list_user_details.append(user_details.copy())
pp.pprint(list_user_details)
输出:
[ defaultdict(<class 'dict'>,
{ 'address': {'city': 'Alanbury'},
'first_name': 'Jennifer'}),
defaultdict(<class 'dict'>,
{ 'address': {'city': 'Alanbury'},
'first_name': 'Bobby'}),
defaultdict(<class 'dict'>,
{ 'address': {'city': 'Alanbury'},
'first_name': 'Christopher'})]
问题在于我无法接收不同的城市。但我对first_name没有问题,例如
答案 0 :(得分:0)
问题是地址是dict(可变),而first_name是一个字符串(不可变)。
当您复制包含可变类型的字典(如另一个字典或列表)时,默认情况下会创建浅副本,这意味着您实际上只有一个字母可以覆盖,因此你看到这里,不可变数据类型没有这个问题。在这种情况下,您必须使用 deepcopy 。有关详细信息:https://docs.python.org/3.6/library/copy.html
但是在你的情况下使用深度复制会让你的代码变得不必要,我想你可以写这个。
for _ in range(3):
user_details = { "address": { "city": fake.city() }, "first_name": fake.first_name() }
list_user_details.append( user_details )