プロジェクトの目的: 入力を既存のインデックスと比較し、用語または文字の頻度で最も近い一致を返します。 基本的に所望の出力は、このような指標で比較関数で行います:2つのネストされたディクショナリ内のキーが一致するかどうかを調べる方法は?
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'}
これを取得したら、両方の辞書を繰り返して、どの文字が存在するかをチェックします。 それらが存在すると、単語と属性ポイントの頻度を比較して、結果を比較し、ほとんどの点を評価するものを返します。 私はコードの最後に問題はありませんでした。 しかし、私が正しいとは思えないのは、2つの辞書とそのネストされた要素の間の反復です(値は辞書です。 2組のアプローチを試してから、両方のセットの結合を取得しました。次の部分にできない:それはセットが不変であることを述べている
その後、私は私がここで見つけるの答えからコードを適応しようとしました:。
if all(string_index[k] == v for k, v in index.items() if k in index):
: python dictionary match key values in two dictionaries をそれから私は上記の回答からインスピレーションを得た、このオプションを試してみましたしかし、その後私はキーエラー、岩(最初のキー)、それはどこかにiteraではないことがわかります私が比較したいと思っているものを比較します。
そこには反復部分にこだわっています。 私がそれを正しくすると、私はそれを終えることができることを知っています。 ヒントやヒントありがとう!
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'を発生させるのではなく、デフォルト値で作成します。 – nigel222
同様の考え方は、 'get'メソッドを使って標準ディレクトリにアクセスすることです。 'd '(' key'、 'default') '' key ''に 'd 'の項目がなければ' default'を返します。そのようなエントリがある場合、値一致キーを返します。 – nigel222
希望する出力は何ですか? – asongtoruin