首页 > 解决方案 > 如何计算字典中单词的长度

问题描述

我有一个这样的字典列表:

myList = [
    {
        'id':1,
        'text':[
            'I like cheese.', 
            'I love cheese.',
            'oh!'
        ],
        'text_2': [
            ('david', 'david', 'I do not like cheese.'),
            ('david', 'david', 'cheese is good.')
        ]
    },
    {
        'id':2,
        'text':[
            'I like strawberry.',
            'I love strawberry'
        ],
        'text_2':[
            ('alice', 'alice', 'strawberry is good.'),
            ('alice', 'alice', ' strawberry is so so.')
        ]
    }
]

我想通过“id”计算“text”和“text_2”的元素数量和长度。理想的输出是:

myList = [
    {
        'id':1,
        'text':(3,7),
        'text_2': (2,8)   
    },
    {
        'id':2,
        'text':(2,6),
        'text_2':(2,7)    
    }
]

'text':(3,7) 表示:3 个元素('I like cheese.'、'I love cheese.'、'oh!');7个字(我,喜欢,奶酪,我喜欢奶酪,哦)

'text_2': (2,8) 表示:2个元素(('david','david','我不喜欢奶酪。'),('david','david', 'cheese is good.')) ; 8 个字(我、做、不、喜欢、奶酪、奶酪、好))

有什么建议么?

标签: pythonlistdictionaryword-count

解决方案


如果您是新手,我的回答很难消化,但我希望您能找到一些对您的未来有用的不错的组合……而且因为您没有提供任何尝试。

  • ' '.join(my_list)使列表元素的字符串由空格分隔
  • my_string.split()通过在单个空格处剪切来从字符串中列出一个列表(-> 这样你就可以数数了)
  • set(my_list)删除一个元素的多次出现
  • itertools.chain连接可迭代对象的函数,将列表中的元组合并为单个对象
  • 列表理解,例如[i for i in range(10) if i > 5]

由于您没有指定任何关于如何处理同一元素的多次出现的规则,我只计算一次(所以 'david','david' 计为 1)

我对您的建议要求的回答是分而治之,将一个大问题分成小问题,解决它们,将它们粘合在一起。

import itertools as it

myList = # see dictionary in the question

for d in myList:
    for k, v in d.items():
        if isinstance(v, list):
           pair = len(v), len(' '.join(v).split()) if isinstance(v[0], str) else len(' '.join([t for t in set(it.chain(*v))]).split())
            print(pair)
        else:
            print(k, v)

输出

id 1
(3, 7)

(2, 9)

id 2
(2, 6)

(2, 8)

推荐阅读