【发布时间】:2017-09-07 14:34:29
【问题描述】:
我有一个包含很多键和大约 100 个值的字典。 但是每个字典最后都有某种ID,我需要将每个字典的值与一些参考进行比较,但前提是它们具有相同的ID。 例如键:
{'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 是一个条件。 请记住,这些是 dict 的键。 我可以用
拆分键.split('/')[1].split('-')[1]
但是不知道如何为仅 dict 与同一个 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
我知道这不是一个很好解释的问题,但让我知道有什么令人困惑的地方,我会解释一下。
假设 bbc id = 1 的对象的引用是 mmc-1/bbc-1。 期望的输出:
{'mmc-2/bbc-1': {
'inner_key5' : '7'}}
对于所有其他 bbc id 也是如此。如果所有对象都只有一个引用,则此代码可以完美运行,无论 bbc id 是什么。
【问题讨论】:
-
如果您提供每个相关对象的子样本,这将很有用 - 真正向我们展示您的所有
dicts 或 Python 语法中的其他内容(我目前并不完全清楚哪些位是什么的键或值)。然后提供一个输出应该是什么样子的小样本(以及你正在努力做的事情)。与使用不熟悉的术语相比,这通常是一种更简单的沟通问题的方式。 -
@IzaakvanDongen 我稍微编辑了我的问题。
-
给我们一些可运行的东西来显示您的问题(最好将问题缩小,这里似乎有更多与您的实际问题无关的细节......)
-
@thebjorn 但我没有更多细节,真的。我已经解析了 xml 文件并在 dict 中得到了 dict。现在我需要将一个外部键的内部键值与另一个外部键值进行比较,如果它们具有相同的 bbc id。当然,还有更多的键,但这里不需要键入。您也许可以尝试使用这三个键和该代码运行脚本,看看我已经拥有什么以及如何进行必要的更改。
-
所以你的目标只是找到从 0 到 ~100 的所有
"mmc-i/bbc-1"的所有键i?还是我误会了你?
标签: python dictionary iteration