如何指向python字典值?

时间:2014-02-22 04:14:35

标签: python dictionary

我有几百个关键字:值对的字典,格式为......

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 dict,我想制作第二个列表(或子词典),它指向第一个字典中的值 - 理想情况下,每次都不重新创建列表。

例如:

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

L = [d['a']]

print L

... [1]

D['a':3]

print L

... [3]

我认为应该有一个引用字典值的对象,然后我可以指向该对象,但我无法弄清楚如何。

2 个答案:

答案 0 :(得分: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}

如果字典中的某些值是 mutable (列表等),您可以获得该值的“指针”(或引用),如C / CPP,并将其修改为 inplace

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']}

但如果您更改'b'中密钥d的引用,则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]]

答案 1 :(得分:0)

如果你想要类似于不可变的指针,我推荐这样的东西:

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