【发布时间】:2017-02-23 11:07:21
【问题描述】:
项目目标: 将输入与预先存在的索引进行比较,并以术语或字母频率返回最接近的匹配。 基本上,所需的输出将在比较函数中使用如下索引:
index = {'nino': {'n': '0.50', 'o': '0.25', 'i': '0.25'},
'pablo': {'l': '0.20', 'p': '0.20', 'o': '0.20', 'b': '0.20', 'a': '0.20'}}
并将其与我将计算字母频率的输入字符串进行比较,以返回类似的输出,即字母频率:
{'y': '0.20', 'k': '0.20', 'o': '0.20', 'c': '0.20', 'r': '0.20'}
一旦我有了这个,我会遍历两个字典并检查每个项目都有哪些字母。 一旦它们出现,我将比较单词和属性点中的频率,然后比较结果并返回得分最高的那个。 我对代码的结尾没有任何问题。 但是,我似乎无法正确理解的是两个字典及其嵌套元素之间的迭代(该值毕竟是字典: 我已经尝试了两组方法,然后得到了两组的并集,但是我无法进行下一部分:它说集合是不可变的。
然后我尝试根据我在此处找到的答案调整代码: python dictionary match key values in two dictionaries 然后我从上面的答案中尝试了这个选项:
if all(string_index[k] == v for k, v in index.items() if k in index):
然后我得到一个关键错误,rocky(第一个键),它告诉我在某个地方它没有迭代和比较我想要比较的内容。
我被困在迭代部分。 一旦我做对了,我知道我可以完成它。 非常感谢任何提示或提示!
index={}
#Get frequency of a letter
def frequency_return(string,letter):
count=0
for letters in string:
if letters==letter:
count+=1
return count
#Scan all letters: if a letter has not been searched then count
def get_frequency(string):
range_string=string
length_string=len(string)
datastore={}
target=0
frequency=0
while len(range_string)!=0:
# datastore.append(range_string[target])
frequency = (int(frequency_return(range_string,range_string[target]))/length_string)
frequency = format(frequency, '.2f')
datastore.update({range_string[target]:frequency})
range_string = range_string.replace(range_string[target],'')
return datastore
def index_string(string):
if string not in index:
index.update({string: (get_frequency(string))})
return index
index_string("pablo")
index_string("rocky")
index_string("rigo")
index_string("nino")
print (index)
###############################################################################################
def comparator (string, index):
string_index=get_frequency(string)
result={}
if all(string_index[k] == v for k, v in index.items() if k in index):
result.update(string_index)
return result
print(comparator("baobab", index))
【问题讨论】:
-
在没有完全理解您的问题的情况下...您是否考虑过
collections中的defaultdict?如果您引用一个迄今为止未知的键,defaultdict 将使用默认值创建它,而不是像标准 dict 那样提高KeyError。 -
类似的想法是使用其
get方法访问标准目录。如果d中没有'key'的条目,则d.get('key','default')返回default。如果有这样的条目,它会返回值匹配键。 -
你想要的输出是什么?
标签: python dictionary iteration