我有一个字典列表:
>>> Fruits = [{'apple': 'red', 'orange': 'orange'}, {'pear': 'green', 'cherry': 'red', 'lemon': 'yellow'}, {}, {}]
>>>
>>> len (Fruits)
4
List 0: {'orange': 'orange', 'apple': 'red'}
List 1: {'cherry': 'red', 'lemon': 'yellow', 'pear': 'green'}
List 2: {}
List 3: {}
虽然len(Fruits)确实返回了“正确”的长度,但我想知道是否有快捷命令只返回列表中包含值的长度?
最终,我想做:
# Length Fruits is expected to be 2 instead of 4.
for i in range (len (Fruits)):
# Do something with Fruits
Fruits [i]['grapes'] = 'purple'
答案 0 :(得分:3)
你可以过滤空的dicts并检查len,或者只为每个非空的dict使用sum
add 1
:
Fruits = [{'apple': 'red', 'orange': 'orange'}, {'pear': 'green', 'cherry': 'red', 'lemon': 'yellow'}, {}, {}]
print(sum(1 for d in Fruits if d))
2
对于任何空字典, if d
将评估为False
,因此我们最终会以2
作为长度。
如果你想从Fruits中删除空的dicts:
Fruits[:] = (d for d in Fruits if d)
print(len(Fruits))
Fruits[:]
更改了原始列表,(d for d in Fruits if d)
是一个generator expression,与sum
示例非常相似,只保留非空字符。
然后遍历列表并访问dicts:
for d in Fruits:
# do something with each dict or Fruits
答案 1 :(得分:2)
您根本不需要len
,也不需要range
:
for d in Fruits:
if not d:
continue
# do stuff with non-empty dict d
答案 2 :(得分:1)
您可以通过以下方式过滤掉空dict
条目:
使用列表推导并使用容器的真实性(如果它是非空的则为True
)
>>> len([i for i in Fruits if i])
2
使用filter
与None
进行过滤
>>> len(list(filter(None, Fruits)))
2