试图将列表列表添加到for循环中的空字典中,但每次迭代都会完全覆盖这些条目

2024-03-28 22:01:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是编程新手。我有一本没有多少键的空字典(在本例中no=3)。我试图生成一个列表列表,该列表将在循环中添加到字典中,但在每个循环中,其他键都被覆盖。请看下面我的尝试:

#generating dictionary for all fibres with number n 
fibre = {i : {}for i in range(no)}
#generating empty fibre of size n_f
fibre_e = [[[] for i in range(n_f)] for j in range(n_f)]
rand_r = [[] for a in range(no)]
rand_c = [[] for a in range(no)]

#generating fibre element from random corner elements
for a in range(no):
    # choosing a random corner element
    fibre[a] = fibre_e
    rand_r[a] = randrange(len(all_e))
    rand_c[a] = randrange(len(all_e))

    for i in range(n_f):
        e1_fibre=all_e[rand_r[a]][rand_c[a]]
        #move to upper row
        rand_r[a] += 1
        for j in range(n_f):
            fibre_e[i][j] = e1_fibre
            e1_fibre += 1

    print(fibre)

这是我检查进度时的输出:

{0: [[57, 58], [66, 67]], 1: {}, 2: {}}
{0: [[33, 34], [42, 43]], 1: [[33, 34], [42, 43]], 2: {}}
{0: [[29, 30], [38, 39]], 1: [[29, 30], [38, 39]], 2: [[29, 30], [38, 39]]}

对于上下文,这是生成一个abaqus网格文件,其中矩阵中随机分布着相同的纤维元素

你知道吗edit:context 你知道吗


使用copy.deepcopy

for a in range(no):
    # choosing a random corner element

    rand_r[a] = randrange(len(all_e))
    rand_c[a] = randrange(len(all_e))

    for i in range(n_f):
        e1_fibre=all_e[rand_r[a]][rand_c[a]]
        #move to upper row
        rand_r[a] += 1
        for j in range(n_f):
            fibre_e[i][j] = e1_fibre
            e1_fibre += 1
            fibre[a] = copy.deepcopy(fibre_e)

    print(fibre)

输出:

{0: [[68, 69], [77, 78]], 1: {}, 2: {}}
{0: [[68, 69], [77, 78]], 1: [[6, 7], [15, 16]], 2: {}}
{0: [[68, 69], [77, 78]], 1: [[6, 7], [15, 16]], 2: [[28, 29], [37, 38]]}

Tags: noin列表forlenrangerandomelement