我有几百个关键字:值对的字典,格式为......
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]
我认为应该有一个引用字典值的对象,然后我可以指向该对象,但我无法弄清楚如何。
答案 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