查找lis中嵌套字典键的数量

2024-04-19 06:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找出一本字典中出现了多少个键“p”。键嵌套在字典中的列表中,如下所示:

    {
"confidence": 0.2802316236036372,
"words": [
    {
        "p": 0,
        "c": 1,
        "s": 1420,
        "e": 4250,
        "m": "turn",
        "w": "Jennifer"
    },
    {
        "p": 1,
        "c": 0.487,
        "s": 1420,
        "e": 1620,
        "w": "Hi"
    }]}

我试过这个:

    import json
    import pprint

    data = json.load(open ('test.json'))

    data_list = data["words"]

    for word in data_list:
        x = str(word['p'])

       # word_list = []
       # word_list.append(x)

但它只返回每个字符串。我试着把它们添加到一个列表中,但没有成功。我也在考虑做一个for循环,只计算有多少,但这似乎是一个笨重的方法。我怎么能: 1创建一个所有字符串的列表,这样我就可以删除最后一个?或者 2在所有字符串中创建一个字符串,这样我就可以类似地删除最后一个?或者 三。循环遍历数据列表中的每个“单词”并计数?或者 4获取所有字符串的列表,然后获取该列表的长度? 谢谢。你知道吗


Tags: 字符串importjson列表fordata字典hi
2条回答

你想得太多了。要检查键是否在dict中,只需执行some_key in some_dict。因此,您可以简单地使用sum

In [6]: d = {
   ...: "confidence": 0.2802316236036372,
   ...: "words": [
   ...:     {
   ...:         "p": 0,
   ...:         "c": 1,
   ...:         "s": 1420,
   ...:         "e": 4250,
   ...:         "m": "turn",
   ...:         "w": "Jennifer"
   ...:     },
   ...:     {
   ...:         "p": 1,
   ...:         "c": 0.487,
   ...:         "s": 1420,
   ...:         "e": 1620,
   ...:         "w": "Hi"
   ...:     }]}

In [7]: data_list = d['words']

In [8]: sum('p' in sub for sub in data_list)
Out[8]: 2

可以在列表中使用嵌套的sum函数:

data_list = {'confidence': 0.2802316236036372, 'words': [{'c': 1, 'e': 4250, 'm': 'turn', 'p': 0, 's': 1420, 'w': 'Jennifer'}, {'p': 1, 'c': 0.487, 'e': 1620, 's': 1420, 'w': 'Hi'}]}
the_count = sum(sum('p' in c for c in b) for a, b in data_list.items() if isinstance(b, list))

输出:

2

相关问题 更多 >