python - 比较字典的键
问题描述
我在阅读文件后生成了一本字典。所以现在我想单独评估字典的键,用 . 我比较的是ASCII字符,只取那些可能小于60的字符。例如
for text in line:
char = ord(text)
num += 1
if char in result:
result[char].add(num)
else:
result[char] = set()
result[char].add(num)
row = list(result.keys())
这就是我得到的。
我试过了
for i in row:
if row[I] < 60:
print(result)
但它说“索引超出范围”。请帮忙
解决方案
问题是您正在遍历字典键列表,然后您尝试使用相同 list 的元素对该列表进行索引。列表索引器必须是整数。
本质上,这就是您的代码所尝试的:
lst = [10, 20, 30]
# this will fail on the first element, lst[10] does not exist
for i in [10, 20, 30]:
if lst[i]:
您可以做的是迭代由列表长度定义的范围:
line = 'this is a test'
num = 0
result = {}
for text in line:
char = ord(text)
num += 1
if char in result:
result[char].add(num)
else:
result[char] = set()
result[char].add(num)
row = list(result.keys())
print(result)
# {32: {5, 8, 10},
# 97: {9},
# 101: {12},
# 104: {2},
# 105: {3, 6},
# 115: {4, 7, 13},
# 116: {1, 11, 14}}
for i in range(len(row)):
if row[i] < 60:
print(row[i], result[row[i]])
# 32 {8, 10, 5}
您可以使用字典推导更有效地实现此逻辑。很少需要从字典键中创建一个明确的列表。
res = {k: v for k, v in result.items() if k < 60}
推荐阅读
- c++ - 试图在不计算空格的情况下找到单词的数量
- sql - Oracle SQL比较同一张表的行
- javascript - 数据表即使填满数据仍然显示无数据
- intel - 英特尔 SGX 服务提供商
- laravel - Eloquent hasManyThrough 也获取中间表信息
- sas - 如何在sas中读取dbf文件?
- c# - ASP .NET MVC CORE 中的 Ws 联合
- rust - HashMap 的可变借用和生命周期省略
- wpf - 如何在 Wpf 中为 Kendo RadTreeView 添加或(覆盖默认值)悬停和选择样式
- ios - Swift:更优雅的方式来编写这个数组映射?