如何在Python中查找包含字典的列表的长度?

时间:2015-05-15 18:01:21

标签: python list dictionary

我有一个字典列表:

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

3 个答案:

答案 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

使用filterNone进行过滤

>>> len(list(filter(None, Fruits)))
2