Python字典获得多个值

时间:2014-06-13 11:18:52

标签: python dictionary

Sry如果这个问题已经存在,但我现在已经找了很长时间了。

我在python中有一个字典,我想要做的是从列表中获取一些值,但我不知道实现是否支持它。

myDictionary.get('firstKey')   # works fine

myDictionary.get('firstKey','secondKey')
# gives me a KeyError -> OK, get is not defined for multiple keys
myDictionary['firstKey','secondKey']   # doesn't work either

但有什么办法可以实现这个目标吗?在我的例子中,它看起来很简单,但是假设我有一个包含20个条目的字典,我想获得5个密钥。除了做

还有其他方法吗?
myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')

9 个答案:

答案 0 :(得分:34)

已存在此功能:

from operator import itemgetter

my_dict = {x: x**2 for x in range(10)}

itemgetter(1, 3, 2, 5)(my_dict)
#>>> (1, 9, 4, 25)
如果传递了多个参数,

itemgetter将返回一个元组。要将列表传递给itemgetter,请使用

itemgetter(*wanted_keys)(my_dict)

答案 1 :(得分:27)

使用for循环:

keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
    myDictionary.get(key)

或列表理解:

[myDictionary.get(key) for key in keys]

答案 2 :(得分:7)

没有人提到map函数,该函数允许该函数在列表上按元素进行操作:

mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']

values = map(mydictionary.get, keys)

# values = ['bear', 'castle']

答案 3 :(得分:4)

您可以使用At from pydash

from pydash import at
dict = {'a': 1, 'b': 2, 'c': 3}
list = at(dict, 'a', 'b')
list == [1, 2]

答案 4 :(得分:1)

如果安装了pandas,则可以将其变成一系列以键为索引的序列。所以像

import pandas as pd

s = pd.Series(my_dict)

s[['key1', 'key3', 'key2']]

答案 5 :(得分:1)

我在这里没有类似的答案-值得指出的是,通过使用(列表/生成器)理解,您可以解压缩这些多个值并将它们分配给单行代码中的多个变量:

first_val, second_val = (myDict.get(key) for key in [first_key, second_key])

答案 6 :(得分:0)

如果后备键不是太多,则可以执行以下操作

value = my_dict.get('first_key') or my_dict.get('second_key')

答案 7 :(得分:0)

使用列表推导并创建函数:

def myDict(**kwargs):
  # add all of your keys here
  keys = ['firstKey','secondKey','thirdKey','fourthKey']

  # iterate through keys 
  # return the key element if it's in kwargs 
  list_comp = ''.join([val for val in keys if val in kwargs ])
  results = kwargs.get(list_comp,None)

  print(results)      

答案 8 :(得分:0)

我认为列表理解是不需要额外导入的最干净的方法之一:

>>> d={"foo": 1, "bar": 2, "baz": 3}
>>> a = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a
[1, 2, 3]

如果希望将值作为单个变量使用,则使用多重分配:

>>> a,b,c = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a,b,c
(1, 2, 3)