我有一个与许多键和大约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