Python优雅dict comp键/值来自同步列表?

2024-09-30 10:39:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

"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],等等。我试图创建一个字典,在这个字典中,我把它展平,并将数字对应于这两个字典:

^{pr2}$

因此,我的终极字典应该将前两个放平,但将数字替换为后两个字典中相应的事件名称,如下所示:

{"SENSOR OPEN":"SOUND BEEP", etc}

到目前为止,我已经可以用这个方法把前两个弄平:

{trigger:self.alarmInfo["actions"][i] for i, trigger in \
    enumerate(self.alarmInfo["triggers"])}

(供参考,自我报警信息是第一组列表的字典)

所以,有两个问题:1)有没有一种更优雅的方式来完成我刚刚发布的字典理解;2)有没有一种优雅的方式将数字转换成数值,这样我就得到了我在上面发布的首选字典外观?我一直在想办法,但最终却很难读懂,而且很难看。谢谢。在


Tags: selfactions列表字典方式数字词典终极
1条回答
网友
1楼 · 发布于 2024-09-30 10:39:39
>>> 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]}

现在你可以写下理解:

^{pr2}$

相关问题 更多 >

    热门问题