Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典获取多个值_Python_Dictionary - Fatal编程技术网

Python字典获取多个值

Python字典获取多个值,python,dictionary,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',

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')

对循环使用

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

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

已存在用于此的函数:

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)

请记住,
itemgetter
在仅请求一个键时不会将其输出包装在元组中,并且不支持请求零键。

您可以使用
At


如果回退键不太多,您可以这样做

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

没有人提到
map
函数,它允许函数在列表中按元素操作:

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

values = list( map(mydictionary.get, keys) )

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

如果安装了
pandas
,则可以将其转换为一个系列,并以键作为索引。大概是

将熊猫作为pd导入
s=pd.系列(我的目录)
s[['key1','key3','key2']]

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

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

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

>>> 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)

好的,我已经考虑过了,但是真的没有实现的方法吗?我的意思是,这并不是一件完全奇怪的事情。我想如果保证每个键都在字典中,你可以编写
[myDictionary[key]for key in keys]
,但没有比这简单多少。或者
[my_dict.get(x)for x in['firstKey',secondKey',thirdKey']
用于单线解决方案,但它尽可能紧凑。好吧,这是不幸的。但是非常感谢你的努力!根据用例的不同,您可能需要一个
if
语句来检查
get
方法返回的
None
值:
[mydict.get(key)for key in keys if key in mydict]
这很酷。它不像我想象的那么短,但很高兴知道;)你能缩短多少?如果名称太长
g=itemgetter
。o、 OI希望它有一些我找不到的内置语法。当然,你可以把它缩短,但是在任何代码审查中,我都会被问到:wtf是g(mykeys)(myDict):DSmall catch有了这个,
itemgetter
至少需要一个参数,所以如果你想做类似
itemgetter(*一些键)(一些dict)
,那么,如果
some_key
是一个空列表,它将失败。itemgetter不会处理KeyError可能重复的超难搜索问题。很高兴我终于找到了这个!要使其正常工作,您必须使用一个列表来封装
map
values=list(map(mydictionary.get,keys))
,这确实处理了KeyError。我建议在示例中为
dict
var选择一个更好的名称。否则,它会隐藏内置的
dict
类型。@IvandePazzente不太正确-只是处理了您的评论。谢谢你指出!
>>> a,b,c = [d.get(k) for k in ["foo", "bar", "baz"]]
>>> a,b,c
(1, 2, 3)