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

时间:2015-08-27 16:24:04

标签: 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']]

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

2 个答案:

答案 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}}。