我有一堆示例字典,其中一些值在列表中。我想从列表中检索信息,但有时某些键中的列表为空。我想做的是检索某些值。我想声明一下,如果列表为空,则从另一个键中检索一个值。
我做了一个if-elif语句,但无法使其正常工作。我尝试编写代码,如果list == None,则执行其他操作。似乎“无”无效。
我在下面举了一个我想做的事的例子。
sample_1 = {'description' : {'captions': [],
'tags': ['person',
'cat']}}
sample_2 = {'description' : {'captions': ['NOT an empty list'],
'tags': ['person',
'cat']}}
# if captions list is empty then print first item in 'tags' list.
# else if the 'captions' list has an item then print that item
if sample_here['captions']==None in sample_here:
result = sample_here['description']['tags'][0]
elif 'captions' in sample_here:
result = sample_here['description']['captions'][0]
答案 0 :(得分:3)
空列表[]不等于无。
sample_1 = {'description' : {'captions': [],
'tags': ['person',
'cat']}}
sample_2 = {'description' : {'captions': ['NOT an empty list'],
'tags': ['person',
'cat']}}
def get_captions(sample_here):
# thanks to bruno desthuilliers's correction. [] has a bool value False
if not sample_here['description']['captions']:
result = sample_here['description']['tags'][0]
else:
result = sample_here['description']['captions'][0]
return result
print(get_captions(sample_1))
print(get_captions(sample_2))
这将输出:
person
NOT an empty list
答案 1 :(得分:1)
在python中,您通常会尝试执行某些操作,然后处理引发的异常(如果有)。在您的情况下,我首先尝试从列表中读取并捕获引发的异常,如下所示:
try:
result = sample_here['description']['captions'][0]
except IndexError:
result = sample_here['description']['tags'][0]
如果try
块失败,则执行except
块。
答案 2 :(得分:0)
好像是伪代码。
所以尝试:
if not sample['captions']:
result = sample['description']['tags'][0]
else:
result = sample['description']['captions'][0]
即使我不知道sample_here
是什么。
或者做一个def:
def f(sample):
if not sample['description']['captions']:
result = sample['description']['tags'][0]
else:
result = sample['description']['captions'][0]
return result
然后可以:
print(f(sample1))
或者:
print(f(sample2))
然后获得所需的输出
答案 3 :(得分:0)
您的要求基本上是检查列表是否为空
可以简单地以pythonic的方式实现:
if not a:
print("a is empty")
希望有帮助。