是否有一种内置/快速的方法来使用字典的键列表来获得对应项的列表?

例如,我有:

>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']

我如何使用mykeys在字典中作为列表获得相应的值?

>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]

当前回答

试试这个:

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one','ten']
newList=[mydict[k] for k in mykeys if k in mydict]
print newList
[3, 1]

其他回答

如果您发现自己经常这样做,您可能希望继承dict的子类,以获取键的列表并返回值的列表。

>>> d = MyDict(mydict)
>>> d[mykeys]
[3, 1]

下面是一个演示实现。

class MyDict(dict):
    def __getitem__(self, key):
        getitem = super().__getitem__
        if isinstance(key, list):
            return [getitem(x) for x in key]
        else:
            return getitem(key)

继承dict的子类需要更多的工作,另外你可能想要实现.get(), .__setitem__(), 以及.__delitem__()等。

除了list-comp,还有其他几种方法:

如果key未找到,则生成列表并抛出异常:__getitem__ mykey) 如果没有找到键,则使用None构建列表:得到,mykey)

或者,使用operator。Itemgetter可以返回一个元组:

from operator import itemgetter
myvalues = itemgetter(*mykeys)(mydict)
# use `list(...)` if list is required

注意:在Python3中,map返回一个迭代器而不是一个列表。使用list(map(…))作为列表。

试试这个:

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one','ten']
newList=[mydict[k] for k in mykeys if k in mydict]
print newList
[3, 1]

试试这个:

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one'] # if there are many keys, use a set

[mydict[k] for k in mykeys]
=> [3, 1]
new_dict = {x: v for x, v in mydict.items() if x in mykeys}