【发布时间】:2015-06-09 04:32:46
【问题描述】:
我有一本包含两个条目的字典:
"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) 是否有一种优雅的方式可以将数字转换为值,所以我最终得到了我发布的首选字典外观更多?我一直在想办法,但它们最终变得非常难以阅读和丑陋。谢谢。
【问题讨论】:
-
你在哪里使用
ALARM_TRIGGER_EVENTS和ALARM_ACTION_EVENTS? -
那么,
1:2的第一个条目将对应于"SENSOR OPEN":"SOUND BEEP",4:[1,12,13,14]的第二个条目将对应于"NOT THERE":["S-SOUND SIREN", "NOT THERE", "ALSO NOT THERE", "AGAIN NOT THERE"]? -
@TigerhawkT3:正确——我遗漏了一堆,所以我没有两页的问题
-
@thefourtheye: 无处可去——这就是第二个问题出现的地方——将展平结果转换为与第一个列表中的整数相对应的字符串的字典
-
@wim:我使用 zip 解决了这个问题——如果你发布一个答案,我可以接受。谢谢。
标签: python for-loop list-comprehension dictionary-comprehension