python将字典值修改为另一个dict

python将字典值修改为另一个dict,python,list,dictionary,Python,List,Dictionary,我有一本字典 a = {'aaa_key': ['aaa/aaa.csv', 'aaa/aaa.csv', 'aaa.csv'], 'bbb_key': ['bbb/bbb.csv', 'bbb/bbb.csv', 'bbb.csv']} 我想将/符号拆分为内部列表值。 我使用此代码,并且print为我提供正确的值,如 aaa_key [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']] 及 但当我试图打印aa字典时,它的列表恰好是空的

我有一本字典

a = {'aaa_key': ['aaa/aaa.csv', 'aaa/aaa.csv', 'aaa.csv'], 'bbb_key': ['bbb/bbb.csv', 'bbb/bbb.csv', 'bbb.csv']} 
我想将
/
符号拆分为内部列表值。 我使用此代码,并且
print
为我提供正确的值,如

aaa_key [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']]

但当我试图打印aa字典时,它的列表恰好是空的
{'aaa_-key':[],'bbb_-key':[]}
。我做错了什么?


清除列表
b
的内容时,它也会清除从同一变量分配的字典值的内容。变量
b
和字典值都引用相同的列表

每次循环输入新键时,只需将变量
b
与新列表的引用关联,而不是清除内容

实施

def foo(a):
    aa = dict()
    for i in a:
        b = []
        for ii in a[i]:
        b.append(str(ii).split('/'))
        aa[i] = b

    return aa
>>> foo(a)
{'aaa_key': [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']], 'bbb_key': [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]}
样本运行

def foo(a):
    aa = dict()
    for i in a:
        b = []
        for ii in a[i]:
        b.append(str(ii).split('/'))
        aa[i] = b

    return aa
>>> foo(a)
{'aaa_key': [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']], 'bbb_key': [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]}

当您将
b
分配给字典值时,实际上值和
b
都引用一个对象,当您使用
del b[:]
删除它时,实际上您同时删除了这两个对象。因此,您需要删除该部分

但作为一种更具python风格的方式,您可以简单地使用创建预期的词典:

>>> {key:[i.split('/') for i in value] for key,value in a.items()}
{'aaa_key': [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']], 'bbb_key': [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]}

请注意,您还可以重新分配到
a

字典中充满了对完全相同列表的引用,在每次循环迭代结束时,您都会小心地清空该列表。尝试
aa[i]=b[:]
。。。