繁体   English   中英

Python:更新字典中的值列表

[英]Python: Updating a list of values in a dictionary

我创建了一个名为matrix的字典,该字典具有0到3的键,然后值是名称列表。 每个键具有相同的值(名称列表)。 当我为节点分配名称时,我想更新字典以仅从一个键中删除该名称。如下面的代码所示,如​​果要通过删除值“ jason”来更新键0,它将删除“ jason”以及其他所有键。 仅从键0删除后,我仍然需要“ jason”作为键1到3的值。

node = [0,1,2,3]
names = ["jason", "martin", "ronnie", "mike"]

def table (node, names):
     options = {} 
     for i in range(len(node)):
         options [i] = names
     return options    

matrix = table(node,names)
print "Before removing Jason: " + str(matrix)
alist = matrix[0]
alist.remove('jason')
matrix[0] = alist
print "After removing Jason: " + str(matrix)
print matrix

我还提供了一个屏幕截图:

在此处输入图片说明

词典中的所有键都指向同一列表。 您想要的是将该列表的副本分配给每个键,以便可以分别修改副本。 替换此代码:

for i in range(len(node)):
     options [i] = names

for i in range(len(node)):
     options [i] = names[:]

列表是python中的参考,表示:

>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
>>> a[0] = 4
>>> b
[4, 2, 3]

如果要创建新列表,则必须执行以下操作:

options [i] = list(names)

解决方案:由于您每次都分配相同的引用,因此无需分配names而是分配names[:]

names[:] (因为names是标准列表)将创建names的副本,因为您要对所有内容进行切片。

您要做的是创建一个新数组而不是修改该数组。

node = [0,1,2,3]
names = ["jason", "martin", "ronnie", "mike"]

def table (node, names):
    options = {} 
    for i in range(len(node)):
        options [i] = names
    return options    

matrix = table(node,names)
print "Before removing Jason: " + str(matrix)
matrix[0] = [x for x in alist where x is not 'jason']
print "After removing Jason: " + str(matrix)
print matrix

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM