【发布时间】:2018-01-12 09:48:00
【问题描述】:
由于在 CPython 3.6 中 dicts 是有序的(我知道它不能保证 - 但使用起来很棒),所以我希望以下 dict 理解来保持顺序:
# attempt to get only specific k:v from dict jrn_blocks in order
jrn_blocks = {"header":0, "open":1, "detached":2, "rps_command":3, "close_no_save":4}
recip = "header,open,close_no_save"
{k: v for k, v in jrn_blocks.items() if k in recip}
# -> gives me: {'close_no_save': 4, 'header': 0, 'open': 1}
# -> I would expect: {'header': 0, 'open': 1, 'close_no_save': 4}
如果我只是对项目元组使用列表推导,则顺序会保留:
[(k, v) for k, v in jrn_blocks.items() if k in recip]
# -> gives me: [('header', 0), ('open', 1), ('close_no_save', 4)]
一旦我尝试从这些元组创建字典,顺序就会再次丢失:
dict([(k, v) for k, v in jrn_blocks.items() if k in recip])
# -> gives me: {'close_no_save': 4, 'header': 0, 'open': 1}
这是预期的行为吗?
后台是否进行了字母键排序?
还是有另一种优雅的方式来做这种“字典过滤器”,同时保持顺序?
提前非常感谢您!
【问题讨论】:
标签: dictionary python-3.6 dictionary-comprehension