我有一個與許多鍵和大約100個值這些鍵的字典。 但是每個字典在最後都有某種ID,我需要比較每個字典的值與一些引用,但只是它們具有相同的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'}}
所以我需要比較剛剛MMC-1/BBC-1使用MMC-2/BBC-1和MMC-3/BBC-1,因此,BBC ID是一個條件。請記住,這些是字典的關鍵。 我可以
.split('/')[1].split('-')[1]
開口鍵,但不知道如何使一個條件比較只是與同BBC字典。 這是比較並將差異放入新字典中的代碼,但是對於每個密鑰都是這樣做的,不需要改動bbc id,這就是我需要改變的地方。 objDict是我的對象字典,refd是帶引用對象的字典,讓我們從上面的例子中爲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
我知道這不是一個很好解釋的問題,但讓我知道什麼是混亂,我要解釋。
讓我們假設基準是MMC-1/BBC-1與BBC ID = 1 所需的輸出對象:
{'mmc-2/bbc-1': {
'inner_key5' : '7'}}
而對於所有其他BBC ID同樣的事情。如果只有一個ref的所有對象,無論bbc id是什麼,此代碼完美工作。
如果您提供了每個相關對象的子樣本,這將非常有用 - 真正向我們展示您的所有「dict」或其他任何類似於Python語法的東西(我目前不完全清楚哪些位是關鍵字或什麼的價值)。然後提供一個輸出應該是什麼樣的小樣本(以及你正在努力做什麼)。與使用不熟悉的術語相比,這通常是交流問題的一種更簡單的方法。 –
@IzaakvanDongen我編輯了一下我的問題。 – jovicbg
給我們一些可以顯示你的問題的runnable(並且最好把問題放大回來,這裏似乎有更多的細節與你的真實問題無關......) – thebjorn