私はたくさんのキーとそれらのキーの約100の値を持つ辞書を持っています。 しかし、すべての辞書には最後にIDがあり、すべての辞書の値をある参考文献と比較する必要があります。例えば、キー :同じ文字列が含まれている場合は同じ文字列のキーを比較するpython
{'mmc-1/bbc-1': {
'inner_key1' : '1',
'inner_key2' : '4',
'inner_key3' : '3',
'inner_key4' : '5',
'inner_key5' : '4',
'inner_key6' : '5',
'inner_key7' : '2',
'inner_key8' : '0',
'inner_key9' : '10'},
'mmc-1/bbc-2': {
'inner_key1' : '3',
'inner_key2' : '4',
'inner_key3' : '3',
'inner_key4' : '5',
'inner_key5' : '6',
'inner_key6' : '5',
'inner_key7' : '2',
'inner_key8' : '8',
'inner_key9' : '10'},
...
'mmc-2/bbc-1': {
'inner_key1' : '1',
'inner_key2' : '4',
'inner_key3' : '3',
'inner_key4' : '5',
'inner_key5' : '7',
'inner_key6' : '5',
'inner_key7' : '2',
'inner_key8' : '0',
'inner_key9' : '10'}}
そこで私は、BBC IDが条件であり、MMC-2/BBC-1およびMMC-3/BBC-1とわずかMMC-1/BBC-1を比較する必要が。 これらはdictのキーです。 私は
.split('/')[1].split('-')[1]
でキーを分割するしかし、どのように同じBBCとのちょうど辞書比較するための条件を作るためには考えていることはできません。 これは、新しい辞書に比較して差を入れるコードですが、すべてのキーで行います.bbc idのメーターではありません。これを変更する必要があります。 objDictはオブジェクトの私のdictです。refdは参照オブジェクトを持つdictです。上の例の最初のオブジェクトをrefオブジェクトとして取ります。
#Choose reference object
ref = tempdict['mmc-1/bbc-1']
m_dif = {}
#Main function for finding differences
for obj, objDict in tempdict.iteritems():
currentDict = {}
# Check if the keys match.
if objDict.keys() != ref.keys():
for key in ref:
if key not in objDict.keys():
currentDict[key] = None
for key in objDict:
if key not in ref.keys():
# Store unexpected values in object.
currentDict[key] = None
# Check if values are the same.
for k, v in objDict.iteritems():
# Check if the key is in ref to avoid error
if k in ref:
# Then compare if values are equal
if ref[k] != objDict[k]:
# Make actual diff
currentDict[k] = v
# Store differences for current object against object title.
m_dif[obj] = currentDict
わかりやすい質問ではありませんが、混乱していることを教えてください。私は説明します。他のすべてのBBC IDの
{'mmc-2/bbc-1': {
'inner_key5' : '7'}}
と同じこと:
はのは、その参照は、BBCのID = 1 所望の出力を持つオブジェクトに対してMMC-1/BBC-1であると仮定しましょう。このコードは、bbc idがどんなものであれ、すべてのオブジェクトに対してただ一つのrefがあれば、完璧に動作します。
あなたが関連するオブジェクトのサブサンプルを提供した場合に役立ちます - あなたの 'dict'や、Pythonの構文で見えるものを真実に見せてください(私は現在、どのビットがキーか、何の値)。次に、出力がどのようなものであるべきか(そして何をするのに苦労しているのか)の小さなサンプルを提供してください。これは、よく知られていない用語を使用するよりも、問題を伝えるもっと簡単な方法です。 –
@ IzaakvanDongen私は少し質問を編集しました。 – jovicbg
あなたの問題を示すrunnableを与えてください。(そして、問題を元に戻してください。あなたの実際の問題に無関係な詳細がたくさんあるようです...) – thebjorn