如何根据任意条件函数过滤字典?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

>>> points={'a':(3,4), 'b':(1,2), 'c':(5,5), 'd':(3,3)}

我想用x和y值小于5的所有点,即点‘a’、‘b’和‘d’,创建一个新的字典。

每个字典都有items()函数,该函数返回(key, pair)元组:

>>> points.items()
[('a', (3, 4)), ('c', (5, 5)), ('b', (1, 2)), ('d', (3, 3))]

所以我写了这个:

>>> for item in [i for i in points.items() if i[1][0]<5 and i[1][1]<5]:
...     points_small[item[0]]=item[1]
...
>>> points_small
{'a': (3, 4), 'b': (1, 2), 'd': (3, 3)}

有没有更优雅的方法?我还以为Python会有超棒的dictionary.filter(f)功能.

提问于
用户回答回答于

现在,在Python2.7及以上版本中,可以使用dict理解:

{k: v for k, v in points.iteritems() if v[0] < 5 and v[1] < 5}

在Python 3中:

{k: v for k, v in points.items() if v[0] < 5 and v[1] < 5}
用户回答回答于
dict((k, v) for k, v in points.items() if all(x < 5 for x in v))

你可以选择打电话.iteritems()而不是.items()如果你在Python 2和points

all(x < 5 for x in v)如果确信每个点都是2D的(在这种情况下,可以用and)但它会很好;-)。

扫码关注云+社区