Python——优雅的dict comp,其中键/值来自同步列表?

Python——优雅的dict comp,其中键/值来自同步列表?,python,for-loop,list-comprehension,dictionary-comprehension,Python,For Loop,List Comprehension,Dictionary Comprehension,我有一本有两个词条的词典: "triggers":[1, 4, 5, 9], "actions":[2, [1, 12, 13, 14], [1, 12, 13, 14], [3, 12, 13]] 触发器对应于动作-因此1对应于2,4对应于列表[1,12,13,14],等等。我试图创建一个字典,在其中我将其展平,并将数字对应于这两个字典: ALARM_TRIGGER_EVENTS = {1: "SENSOR OPEN", 2: "MOTION

我有一本有两个词条的词典:

"triggers":[1, 4, 5, 9], 
"actions":[2, [1, 12, 13, 14], [1, 12, 13, 14], [3, 12, 13]]
触发器对应于动作-因此1对应于2,4对应于列表[1,12,13,14],等等。我试图创建一个字典,在其中我将其展平,并将数字对应于这两个字典:

ALARM_TRIGGER_EVENTS = {1: "SENSOR OPEN",
                        2: "MOTION DETECTED",
                        ...etc}
ALARM_ACTION_EVENTS = {1: "S-SOUND SIREN",
                       2: "SOUND BEEP",
                       ...etc}
因此,我的终极字典应该将前两个放平,但将数字替换为后两个字典中相应的事件名称,如下所示:

{"SENSOR OPEN":"SOUND BEEP", etc}
到目前为止,我已经能够用以下方法将前两种方法变平:

{trigger:self.alarmInfo["actions"][i] for i, trigger in \
    enumerate(self.alarmInfo["triggers"])}
作为参考,self.alarmInfo是第一组列表的字典

所以,有两个问题:1有没有更优雅的方法来完成我刚刚发布的词典理解,2有没有优雅的方法来将数字转换为值,这样我就可以得到我上面发布的首选词典外观?我一直在想办法,但结果却是难以置信的难以阅读和丑陋。谢谢

>>> d = {
...     'actions': [2, [1, 12, 13, 14], [1, 12, 13, 14], [3, 12, 13]],
...     'triggers': [1, 4, 5, 9],
... }
>>> d_map = dict(zip(d['triggers'], d['actions']))
>>> d_map = {k: [v] if isinstance(v, int) else v for k,v in d_map.items()}
>>> d_map
{1: [2], 4: [1, 12, 13, 14], 5: [1, 12, 13, 14], 9: [3, 12, 13]}
现在你可以写下理解:

{TRIGGERS[k]: [ACTIONS(v) for v in vs] for k,vs in d_map.items()}

您在哪里使用报警触发事件和报警动作事件?因此,1:2的第一个条目对应于传感器打开:声音嘟嘟声,4的第二个条目:[1,12,13,14]对应于不存在:[S-声音警报器,不存在,也不存在,再次不存在]?@TigerhawkT3:正确-我漏掉了一堆,所以我没有2页question@thefourtheye:还没有,这就是第二个问题所在-将展平的结果转换为与第一个整数对应的字符串的dictlists@wim:我是用zip计算出来的-如果你发布一个答案,我可以接受。谢谢