經過數小時的猜測,我放棄了。下面你會看到我的代碼,我想盡可能地描述它。
我有以下設定:
self.dict_是一個有兩個鍵值對的字典。test_0是一個沒有任何意義的假人test_1是一個陣列
在self.controller我想將副本self.test_dict放入的范圍內test_1。
在這種情況下 5 次。到目前為止一切順利,沒有問題。
現在到了一切都出錯的部分。對于我想要隨機更改的test_dictin 的每個副本,并且. 那是行不通的。每個名稱和 ID 都獲得相同的值。test_1IDname
當我硬編碼self.dict_為
{
"test_0": "", "test_1": [
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0},
{"name": "", "ID": 0}
]
}
一切正常,每個name都ID隨機更改。
進for loop是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):
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()
uj5u.com熱心網友回復:
我認為 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/名稱的方式可能會創建重復項,但是由于您沒有說明您是否想要/不想要重復項,所以我暫時將其保留原樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465140.html
上一篇:將串列推導轉換為函式式編程
下一篇:如何根據子值的存在洗掉字典中的值
