查询交叉引用词典

时间:2017-11-18 11:42:43

标签: python python-3.x list dictionary iteration

我坚持使用一些列表/字典工作。这是我第一个词典列表的一部分

{'createdTime': '2017-11-18T11:11:42.223Z',
 'fields': {'Pair ID': 307,
            'Source': ['recmSPeRUDk7JxTEs'],
            'Target': ['recEijqlS0kjmIjpL']},
 'id': 'rec02AuJ8QzEZR56b'}

SourceTarget中,它引用来自另一个字典的条目,这些条目看起来像这样(在此处不相关的所有内容都被删除)

{'createdTime': '2017-11-05T17:14:59.000Z',
 'fields': {'Name': 'John',
            'E-Mail': 'john@example.com ',
 'id': 'rec0KMaG8L7qldPuI'}

链接是通过id字段。因此,上面的字典中的Source和Target引用了第二个中的条目。我知道需要在迭代列表的同时从上面的字典中向每个Source发送电子邮件。

两者都是词典列表。我的问题是我是否需要遍历第二个列表,或者有没有办法以更智能的方式引用与上面的Source匹配的记录?

1 个答案:

答案 0 :(得分:0)

由于您的数据格式化方式,答案是肯定的,您必须进行迭代,因为当您知道密钥并希望拥有相应的值时,将使用字典。在这里,您希望检索知道反向情况的值的密钥。

现在,如果这是您想要的,我建议您修改数据结构,以便id不是字段,而是直接作为字典的键。例如:

events_recorded = {
    'rec02AuJ8QzEZR56b' :
        {'createdTime': '2017-11-18T11:11:42.223Z',
         'fields': {
                    'Pair ID': 307,
                    'Source': ['recmSPeRUDk7JxTEs'],
                    'Target': ['recEijqlS0kjmIjpL']},
        },
    'recRkckX9nfl5VhWk' :
         {'createdTime': '2017-11-18T12:05:42.223Z',
         'fields': {
                    'Pair ID': 45,
                    'Source': ['reclfUAfAmCRlmuKw'],
                    'Target': ['recMIG7mm7eNZ79IC']},
        },
    'receeyCtLXIA2r1dw' :
         {'createdTime': '2017-11-18T12:05:42.223Z',
         'fields': {
                    'Pair ID': 45,
                    'Source': ['recnQPVxk5Lvv73xz'],
                    'Target': ['recMV3zbkgevDEgr0y']},
        },

}


addressbook = {
    'rec0KMaG8L7qldPuI' :
        {'createdTime': '2017-11-05T17:14:59.000Z',
         'fields': {'Name': 'John',
                    'E-Mail': 'john@example.com '}
         },
    'reclfUAfAmCRlmuKw' :
         {'createdTime': '2017-10-05T03:43:02.000Z',
         'fields': {'Name': 'Ehtel',
                    'E-Mail': 'ethel@example.com '}
         },
    'recMV3zbkgevDEgr0y' :
         {'createdTime': '2017-10-05T03:43:02.000Z',
         'fields': {'Name': 'Gertrude',
                    'E-Mail': 'gertrude@example.com '}
         },

    }

然后你可以做以下事情:

reference_wanted = events_recorded['rec02AuJ8QzEZR56b']['fields']['Source'][0]
email_wanted = addressbook[reference_wanted]['fields']['E-Mail']

但这取决于您的数据结构