python - 如何计算字典中单词的长度
问题描述
我有一个这样的字典列表:
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 个字(我、做、不、喜欢、奶酪、奶酪、好))
有什么建议么?
解决方案
如果您是新手,我的回答很难消化,但我希望您能找到一些对您的未来有用的不错的组合……而且因为您没有提供任何尝试。
' '.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)
推荐阅读
- wordpress - 返回页面时关闭 WordPress 手风琴
- python - Python Discord 机器人在加入时提供角色
- database - 串行计划视图本身是否可序列化?
- r - 在 R 中用一行绘制数据框的最简单方法
- java - 如何在 Android Studio 中获取崩溃的回溯?
- countif - 有没有办法同时计算两个单独列中的空白单元格?
- automation - 如何在word文档中添加按钮以复制同一word文档中的文本区域
- html - 使用 jQuery 将 HTML 文件用作其他 HTML 文件的模板时出现问题
- python - 编码字符的奇怪输出
- php - 来自下拉菜单mysql的面包屑