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[:]
。。。