如果字典中的值也在列表中,则从字典创建子字典

时间:2013-06-20 18:47:08

标签: python python-2.7 dictionary

我有一本字典:

keys = [1., 2., 3., 4., 5.] 
values = [0.8, 0.8, 0.6, 0.0, .25]
dic = dict(zip(keys, values))

并且如果第一个字典的值也在列表中,则想创建一个仅包含第一个字典中的键和值的子字典。

list = [ 1., 0.8, 0.8, 0.4, 0.0]

我希望subictionary为:

subdic = {1.:0.8, 2.:0.8, 4.:0.0}

我将不胜感激任何帮助! 谢谢!

2 个答案:

答案 0 :(得分:3)

使用字典理解:

>>> dic = dict(zip(keys, values))
>>> lis = [ 1., 0.8, 0.8, 0.4, 0.0]
>>> {k:v for k,v in dic.items() if k in lis or v in lis}
{1.0: 0.8, 2.0: 0.8, 4.0: 0.0}

对于带有生成器表达式的Python 2.6或更早版本use dict()

>>> dict((k,v) for k,v in dic.items() if k in lis or v in lis)
{1.0: 0.8, 2.0: 0.8, 4.0: 0.0}

在Python 2中,您可以使用dict.iteritems(),因为它返回一个迭代器。 dict.items()适用于两个版本。

答案 1 :(得分:1)

每当您想要基于过滤器构建字典时,请使用字典理解:

subdic = {k: v for k, v in dic.iteritems() if k in lst or v in lst}