我有一本字典
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']]
和
bbb_key [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]
但是当我尝试打印一个字典时,它的列表恰好是空的{'aaa_key': [], 'bbb_key': []}
。我究竟做错了什么?
code sample
b = []
aa = dict()
for i in a:
for ii in a[i]:
b.append(str(ii).split('/'))
print str(i) + ' ' + str(b)
aa[i] = b
del b[:]
print aa
答案 0 :(得分:1)
当您清除列表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']]}
答案 1 :(得分:1)
当您将b
分配给字典值实际上两个值和del b[:]
引用一个对象时,当您使用>>> {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']]}
删除它时,实际上您删除它们。所以你需要删除那部分。
但是作为一种更加pythonic的方式,你可以简单地使用dictionary comprehension来创建你想要的词典:
a
请注意,您也可以重新分配到{{1}}。