python字典按值获取

时间:2015-06-07 03:56:54

标签: python dictionary

所以我的问题是如何通过键获取VALUE而不是获取指针。我有以下代码,我想在没有更改字典中的值的情况下执行tempA。

temp_keys=["a","b","c","d"]
temp_values=[[1,1],[2,2],[3,3],[4,4]]
temp=dict(zip(temp_keys,temp_values))

tempA=temp.get('a',temp.copy())
tempA.append(2)
print temp

输出是:

{'a': [1, 1, 2], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}

查看键“a”的值已更改。
我希望我的变量temp不变,

{'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}

4 个答案:

答案 0 :(得分:2)

我相信你正在寻找深刻的副本

import copy
temp_keys=["a","b","c","d"]
temp_values=[[1,1],[2,2],[3,3],[4,4]]
temp=dict(zip(temp_keys,temp_values))
print temp
temp_copy = copy.deepcopy(temp)
temp_copy['a'].append(2)
print temp

您的temp将保持不变:

  

{' d':[4,4],' b':[2,2],' c':[3,3],& #39; a':[1,1]} {' d':[4,4],   ' b':[2,2],' c':[3,3],' a':[1,1]}

答案 1 :(得分:2)

这里的问题是您的值是列表,这是一个可变结构。为此,您需要copy

>>> temp_keys=["a","b","c","d"]
>>> temp_values=[[1,1],[2,2],[3,3],[4,4]]
>>> temp=dict(zip(temp_keys,temp_values))

到目前为止一切顺利。现在复制返回的值而不是传递的参数

>>> tempA=copy.copy(temp.get('a',temp))

现在输出将按预期进行

>>> tempA.append(2)
>>> print temp
{'a': [1, 1], 'c': [3, 3], 'b': [2, 2], 'd': [4, 4]}

答案 2 :(得分:2)

如果我理解正确,你想要复制字典值,在这种情况下是一个列表,并将一个元素附加到副本。

您可以使用new_list = list(old_list)new_list = old_list[:]复制python中的列表。

# Our dictionary:
my_dict = {'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}

# Copy element a:
new_a = list(my_dict['a'])
new_a.append(2)

print my_dict  # {'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}
print new_a    # [1, 1, 2]

答案 3 :(得分:1)

只需更改

tempA=temp.get('a',temp.copy())

tempA=temp.get('a').copy()

<强>解释 如果您打印密钥的ID&#39; a&#39;无论是字典(原始字典还是复制字典),您都会发现它们在内存中引用相同的位置。因此,一方的改变会影响另一方。

newtemp = dict(temp)
print(id(newtemp.get('a')))
print(id(temp.get('a')))

输出

39274840
39274840