Python随机重命名嵌套在字典中的字典中的值[数组]

乘风 python 195

原文标题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_dictintest_1的每一个副本我都想随机改变IDname。那是行不通的。每个名称和 ID 都获得相同的值。

当我硬编码self.dict_as

    {
   "test_0": "", "test_1": [
    {"name": "", "ID": 0}, 
    {"name": "", "ID": 0}, 
    {"name": "", "ID": 0}, 
    {"name": "", "ID": 0}, 
    {"name": "", "ID": 0}
        ]
        }

一切正常,每个nameID都是随机更改的。

就像我说的,经过数小时的思考,我已经别无选择,迫切需要帮助。

for loopintest_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()

原文链接:https://stackoverflow.com//questions/71996146/python-randomly-rename-values-in-dicts-who-are-nested-in-dictarray

回复

我来回复
  • bmjeon5957的头像
    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年前 0条评论