2016-09-19 92 views
-1

我有一个巨大的字典,看起来像这样的具体数字键的数量:Python字典:其值

data = {'this': [{'DT': 100}], 'run': [{'NN': 215}, {'VB': 2}], 'the': [{'NNP': 6}, {'JJ': 7}, {'DT': 39517}]} 

我想这样做是运行将返回,例如查询时,按键正好用两个值,在这种情况下,答案是一个因为'run'是唯一一个与正好两个值{'NN': 215} & {'VB': 2}

我认为这可能与正则表达式来完成,但无法找到如何号码。

+1

RegEx用于解析字符串,而不是任何其他数据类型。 – noahnu

+1

您的字典格式错误也请打印出来帮助我们。 – Dan

+1

你有重复键'运行',并尝试使用过滤器,如过滤器(lambda s:len(data [s])== 2,data)来过滤字典 –

回答

2

这将做的工作:

print len(filter(lambda x: len(x) == 2, data.values())) 

当物品的长度为2 filter()只选择其中的λ返回true这些项目,然后再算上序列的长度拉姆达返回true由filter()返回。 允许我们过滤字典中的值而不是键(这正是我们所知道的)。由于您只需要计数,所有值都是需要的。

0

你不需要regex来实现这一点。正则表达式用于解析字符串。更好的方法是创建一个新的列表中key存储与价值的len() == 2列表:

data = {'this': [{'DT': 100}], 'run': [{'NN': 215}, {'VB': 2}], 'the': [{'NNP': 6}, {'JJ': 7}, {'DT': 39517}]} 
key_list = [k for k, v in data.items() if len(v) == 2] 
# key_list => ['run'] 

要获得这些值的列表,请拨打len为:

>>> len(key_list) 
1 
0

刚刚得到的长度和计算所需的长度。

>>> map(len, data.values()).count(2) 
1