Python随机重命名嵌套在字典中的字典中的值[数组]
python 277
原文标题 :Python Randomly Rename values in dicts who are nested in Dict[Array]
经过数小时的猜测,我放弃了。下面你会看到我的代码,我想尽可能地描述它。
我有以下设置:
self.dict_
是一个有两个键值对的字典。
test_0
是一个没有任何意义的假人
test_1
是一个数组
在self.controller
的范围内我想把副本从self.test_dict
放入test_1
。
在这种情况下 5 次。到目前为止一切顺利,没有问题。
现在到了一切都出错的部分。对于test_dict
intest_1
的每一个副本我都想随机改变ID
和name
。那是行不通的。每个名称和 ID 都获得相同的值。
当我硬编码self.dict_
as
{
"test_0": "", "test_1": [
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0}
]
}
一切正常,每个name
和ID
都是随机更改的。
就像我说的,经过数小时的思考,我已经别无选择,迫切需要帮助。
for loop
intest_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):
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()
回复
我来回复-
bmjeon5957 评论
我认为 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}]}
但是,您可以看到随机选择 ID/名称的方式可能会创建重复项,但是由于您没有说明您是否想要/不想要重复项,所以我暂时将其保留原样。
2年前