2014-02-22 16 views
0

我有幾百個鍵的字典:值對,形式...如何指向python字典值?

In [1]: D = {'a':1, 'b':7, 'c':23, 'd':3} 

我需要從這個字典的子集得到的值。我目前將其存儲鑰匙,如

In [2]: k = ['a', 'c'] 

然後我可以得到相應的鍵的列表:使用列表理解值對...

In [5]: v = [(_k[0],_k[1]) for _k in D.items() if _k[0] in k] 

In [6]: v 
Out[6]: [('a', 1), ('c', 23)] 

在我實際的代碼,我會更改字典中的幾個值,然後更新鍵值對並將它們輸入到函數中。我必須這樣做數百萬次,所以我希望我不必在每一步重新制作清單。但是,它最終看起來像我將不得不更新列表。感謝所有的幫助。

原帖如下...

我有一個Python字典,我要進行第二次列表(或子字典),它指向第一字典中的值 - 最好不用每次都重新創建列表。

例如:

D = {'a':1, 'b':2} 

L = [d['a']] 

print L 

... [1] 

D['a':3] 

print L 

... [3] 

我認爲應該有一個對象,它指的是字典值,然後我可以指向對象,但我無法弄清楚如何。

+0

'd [ 'a':3]'你想用這個做什麼? – thefourtheye

+0

請澄清您的具體問題或添加其他詳細信息,以突出顯示您的需要。正如目前所寫,很難確切地說出你在問什麼。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)頁面以獲得澄清此問題的幫助。 – thefourtheye

+0

@thefourtheye也許OP想要像C/Cpp中的指針那樣,當修改字典的值時,讓'L'知道 – zhangxaochen

回答

0

你不能這樣做,如果dict的值immutable(例如,數字,字符串,元組):

In [547]: d = {'a':1, 'b':2} 

In [549]: l=d.values() 
In [550]: d['a']=123 

In [551]: l 
Out[551]: [1, 2] 

In [552]: d 
Out[552]: {'a': 123, 'b': 2} 

如果在字典中的一些值是可變(列表,等),就可以得到就像在C/CPP該值的 「指針」(或參考),並對其進行修改就地

In [560]: d = {'a':1, 'b':[]} 
    ...: l = d.values() 
    ...: print l 
[1, []] 

In [561]: d['b'].append(1) #modify [] inplace to [1] 

In [562]: l #l "knows" that 
Out[562]: [1, [1]] 

In [563]: d 
Out[563]: {'a': 1, 'b': [1]} 

In [564]: l[1].append('asdf') #modify [1] inplace to [1, 'asdf'] 

In [565]: l 
Out[565]: [1, [1, 'asdf']] 

In [566]: d #d "knows" that 
Out[566]: {'a': 1, 'b': [1, 'asdf']} 

,但如果你在d改變的關鍵'b'參考,L永遠不會知道:

In [558]: d['b']=[3,4,5] #d['b'] refers to another list 
    ...: d 
Out[558]: {'a': 1, 'b': [3, 4, 5]} 

In [559]: l 
Out[559]: [1, [1]] 
0

如果你想類似於像指針immutables的東西,我建議是這樣的:

>>> D = {'a':1,'b':2} 
>>> L=[lambda: D['a']] 
>>> L[0]() 
1 
>>> D['a']=9 
>>> L[0]() 
9