Python 随机重命名嵌套在 Dict[Array] 中的字典中的值
Python randomly renames values in dicts who are nested in Dict[Array]
经过几个小时的猜测,我放弃了。下面是我的代码,我想尽可能详细地描述它。
我有以下设置:
self.dict_
是一个有两个键值对的字典。
test_0
是一个没有任何意义的假人
test_1
是一个数组
在 self.controller
的范围内,我想将 self.test_dict
的副本放入 test_1
。
在这种情况下5次。到目前为止一切顺利,没问题。
现在是一切都出错的部分。对于 test_1
中的每个 test_dict
副本,我想随机更改 ID
和 name
。那是行不通的。每个名称和 ID 都具有相同的值。
当我将 self.dict_
硬编码为
{
"test_0": "", "test_1": [
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0}
]
}
一切正常,每个 name
和 ID
都是随机更改的。
test_run
中的for loop
是必须的。为了测试和向您展示我的意思,我采用了我实际设置中的概念,在该设置中它是必要的并且工作正常。
用于测试目的的带有打印语句的代码:
import random
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
r = 0
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
r += 1
print("r", r)
print("innner", self.dict_['test_1'])
def test_run(self):
for i in range(1):
v = 0
for i in range(self.controller):
self.dict_['test_1'].append(self.test_dict)
v += 1
print(self.dict_, "v", v)
self.append()
print(self.dict_['test_1'])
z = Bla()
z.test_run()
没有打印语句的代码:
import random
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
def test_run(self):
for i in range(1):
for i in range(self.controller):
self.dict_['test_1'].append(self.test_dict)
self.append()
z = Bla()
z.test_run()
我认为 deepcopy 可能就是您要找的东西。
import random
from copy import deepcopy
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
def test_run(self):
for i in range(1):
for i in range(self.controller):
self.dict_['test_1'].append(deepcopy(self.test_dict))
self.append()
z = Bla()
z.test_run()
print (z.dict_)
{'test_0': '', 'test_1': [{'name': 'Eva', 'ID': 3}, {'name': 'Eva', 'ID': 3}, {'name': 'Ernie', 'ID': 3}, {'name': 'Daniel', 'ID': 0}, {'name': 'Adam', 'ID': 5}]}
但是,如您所见,您随机 select ID/name 的方式可能会创建重复项,但由于您没有说明 want/doesn 是否不需要重复项, 我暂时保持原样。
经过几个小时的猜测,我放弃了。下面是我的代码,我想尽可能详细地描述它。
我有以下设置:
self.dict_
是一个有两个键值对的字典。test_0
是一个没有任何意义的假人test_1
是一个数组
在 self.controller
的范围内,我想将 self.test_dict
的副本放入 test_1
。
在这种情况下5次。到目前为止一切顺利,没问题。
现在是一切都出错的部分。对于 test_1
中的每个 test_dict
副本,我想随机更改 ID
和 name
。那是行不通的。每个名称和 ID 都具有相同的值。
当我将 self.dict_
硬编码为
{
"test_0": "", "test_1": [
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0}
]
}
一切正常,每个 name
和 ID
都是随机更改的。
test_run
中的for loop
是必须的。为了测试和向您展示我的意思,我采用了我实际设置中的概念,在该设置中它是必要的并且工作正常。
用于测试目的的带有打印语句的代码:
import random
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
r = 0
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
r += 1
print("r", r)
print("innner", self.dict_['test_1'])
def test_run(self):
for i in range(1):
v = 0
for i in range(self.controller):
self.dict_['test_1'].append(self.test_dict)
v += 1
print(self.dict_, "v", v)
self.append()
print(self.dict_['test_1'])
z = Bla()
z.test_run()
没有打印语句的代码:
import random
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
def test_run(self):
for i in range(1):
for i in range(self.controller):
self.dict_['test_1'].append(self.test_dict)
self.append()
z = Bla()
z.test_run()
我认为 deepcopy 可能就是您要找的东西。
import random
from copy import deepcopy
class Bla:
def __init__(self):
self.dict_ = {"test_0": "", "test_1": []}
self.test_dict = {"name": "", "ID": 0}
self.name_list = ["Daniel", "Eva", "Adam", "Bert", "Ernie"]
self.random_num = [0, 1, 2, 3, 4, 5]
self.controller = 5
def append(self):
for x in self.dict_['test_1']:
random_name = random.sample(self.name_list, 1)
x['name'] = random_name[0]
random_number = random.sample(self.random_num, 1)
x['ID'] += random_number[0]
def test_run(self):
for i in range(1):
for i in range(self.controller):
self.dict_['test_1'].append(deepcopy(self.test_dict))
self.append()
z = Bla()
z.test_run()
print (z.dict_)
{'test_0': '', 'test_1': [{'name': 'Eva', 'ID': 3}, {'name': 'Eva', 'ID': 3}, {'name': 'Ernie', 'ID': 3}, {'name': 'Daniel', 'ID': 0}, {'name': 'Adam', 'ID': 5}]}
但是,如您所见,您随机 select ID/name 的方式可能会创建重复项,但由于您没有说明 want/doesn 是否不需要重复项, 我暂时保持原样。