比较Python中嵌套字典的键和值

乔维奇

我需要比较Python中的字典,并在下面编写了以下代码:

diff_dict = {}
for key, value in old_dictionary.items():
    for k, v in new_dictionry.items():
        if k==key:
            inner_dict = {}
            for key1, value1 in value.items():
                for k1, v1 in v.items():
                    if key1==k1 and value1!=v1:
                        compared_value = str(value1) + '_' + str(v1)
                        inner_dict.update({key1: compared_value})
            diff_dict.update({k: inner_dict})

我有一些站点作为键,参数作为内键以及每个参数的值。我需要将当前词典与前一天的词典进行比较。

但这效率不高,需要半小时,但仍然没有完成。有什么有效的方法可以做到这一点吗?

我想用这样的结构得到一个新的嵌套字典:

{key: {inner_key: compared_value}}

比较值是由新值和旧值串联而成的,因此我以后可以用'_'进行拆分,并在Pandas中创建两列。

旧数据示例:

{'site-1/cell-1': {'tac' : 10, md: 5},
 'site-2/cell-1': {'tac' : 10, md: 1}}

新:

{'site-1/cell-1': {'tac' : 10, md: 4},
 'site-2/cell-1': {'tac' : 12, md: 1}}

所需的输出:

{{'site-1/cell-1': {md: '5_4'},
 'site-2/cell-1': {'tac' : '10_12'}}
马0

以下应该可以工作,并且比您的要快得多:

from collections import defaultdict


diff_dict = defaultdict(dict)
for key, value in old_dictionary.items():
    v = new_dictionary.get(key, None)
    if v:
        for key1, value1 in value.items():
            v1 = v.get(key1, None)
            if v1 and value1 != v1:
                compared_value = str(value1) + '_' + str(v1)
                diff_dict[key].update({key1: compared_value})

同样,FYI用输入和期望的输出来证明一个最小的例子,确实会使想要帮助的人的生活更加轻松。下次请记住这一点。

我自己创建了一个:

old_dictionary = {'a': {'b': 1, 'c': 2}, 'd': {'f':5}}
new_dictionary = {'a': {'b': 2, 'c': 2}, 'd': {'f':6}}

产生:

defaultdict(<class 'dict'>, {'a': {'b': '1_2'}, 'd': {'f': '5_6'}})

并且如果最后的defaultdict数据类型使您感到困惑,则始终可以转换为原始格式-dict只需进行强制转换:

diff_dict = dict(diff_dict)

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados