1

说,我有一个数据字典及其变量名,例如

dct = {'a': 1, 'b': 2, 'c':3}

我想检索与键子集关联的值。如何在不编码太多的情况下做到这一点,即逐个提取变量?有没有类似的东西

a, c = dct['a','c']
4

5 回答 5

4

您可以为此使用生成器表达式:

>>> d = {'a':1,'b':2,'c':3}
>>> a, c = (d[key] for key in ['a', 'c'])
>>> a
1
>>> c
3

如果您经常这样做以至于值得将其包装在一个函数中,那将是微不足道的:

>>> def multiget(mapping, *keys):
...     return (d[key] for key in keys)
>>> a, c = multiget(d, 'a', 'c')

然而,如果你仔细看,你会发现它multiget只是operator.itemgetteruncurried,而且使用它通常要简单得多:

>>> a, c = operator.itemgetter('a', 'c')(d)
于 2013-06-07T21:51:39.593 回答
1

出于教育目的:

>>> d = {'a':1,'b':2,'c':3}
>>> globals().update((k, d[k]) for k in ('a', 'c'))
>>> a
1
>>> c
3

但是永远不要真正使用这样的东西

于 2013-06-07T21:43:19.273 回答
1

你几乎拥有它:p

>>> a, c = dct['a'], dct['c']
>>> a
1
>>> c
3

请不要dict用作变量名:)。它已经是一个内置类型和函数,所以你刚刚覆盖了它:p。

于 2013-06-07T21:45:50.423 回答
1

operator.itemgetter这很方便

d = {'a':1,'b':2,'c':3}
from operator import itemgetter
a, c = itemgetter('a', 'c')(d)
print a, c
1 3
于 2013-06-07T21:52:27.327 回答
1

喜欢实用风格?

>>> d = {'a':1,'b':2,'c':3}

>>> a, c = map(d.get, ('a','c'))
>>> a, c
(1, 3)
于 2013-06-07T21:58:09.697 回答