2017-06-01 90 views
0

非空值我有一个字典是这样的:查找字典

d = {'first':'', 'second':'', 'third':'value', 'fourth':''} 

,我想找到第一个非空值(和它的名字,在这个例子中'third')。可能有多个非空值,但我只想要找到第一个。

我该怎么做?

+7

当你说“第一个”时:你知道字典是无序的吗? – MSeifert

+0

@ MSeifert是的,该列表是例如,我知道字典没有排序。 – GeekyMo

回答

2

你可以使用next(字典是无序的 - 这在Python 3.6有所改变,但这只是一个实现细节目前)得到一个“不空”键 - 值对:

>>> next((k, v) for k, v in d.items() if v) 
('third', 'value') 
+2

即使在Python 3.6中,这也只是一个实现细节,随时可能会改变:“这个新实现的顺序保留方面被认为是一个实现细节,**不应该依赖**”https://docs.python。 org/3/whatsnew/3.6.html#whatsnew36-compactdict – DeepSpace

+0

@DeepSpace你说得对。我总是“忽略”它只是一个实现细节。这太方便了,想现在订购他们:) – MSeifert

4

使用的OrderedDict这保留了元素的顺序。然后循环它们,找到第一个不是空的:

from collections import OrderedDict 
d = OrderedDict() 
# fill d 
for key, value in d.items(): 
    if value: 
     print(key, " is not empty!") 
2

这样子?

def none_empty_finder(dict): 
    for e in dict: 
     if dict[e] != '': 
      return [e,dict[e]] 
+0

我认为他想要的关键和价值。从这个问题:“我想找到第一个非空值(在这个例子中是'第三') – MSeifert

+0

@MSeifert updated – Default

1
d = {'first':'', 'second':'', 'third':'value', 'fourth':''} 
for k, v in d.items(): 
    if v!='': 
     return k, v 

编辑1

from the comment如果值是None''我们更好地利用if v:代替if v!=''if v!=''只检查''并跳过其他人

+0

你可以键入'if v:'以防万一v在' {}'或'None'或'''' – GeekyMo

+0

@MohammadHoseinBin,是的。你是对的。我知道了。 –