如何展平列表且不丢失映射关系?及反转单值映射列表的字典
嘿,这两个都是日常处理Python字典和列表时很常见的需求,我来给你具体说说怎么实现:
问题1:展平列表同时保留原有映射关系
当你有一个「键对应列表」的字典,想要把嵌套的列表展平,但又不想丢掉每个元素属于哪个原键的关联信息时,最直接的方式是生成一个包含**(原键, 元素)**的元组列表——这样既展平了结构,又完整保留了映射关系。
举个实际的例子:
假设你的原始字典是这样的:
original_dict = {'fruit': ['apple', 'banana', 'cherry'], 'vegetable': ['carrot', 'spinach']}
用列表推导式就能快速实现需求:
flattened_mapping = [(key, item) for key, items in original_dict.items() for item in items]
执行后得到的结果是:
[('fruit', 'apple'), ('fruit', 'banana'), ('fruit', 'cherry'), ('vegetable', 'carrot'), ('vegetable', 'spinach')]
每个元素都和它的原键绑定在一起,后续不管是筛选、统计还是转换格式,都能随时拿到对应的映射关系。
问题2:反转键值为列表的字典(列表条目唯一)
题目里明确说了列表中的条目都是唯一的,这就省去了处理重复键冲突的麻烦。我们可以直接用字典推导式,遍历原字典的每个键和对应的列表,把列表里的每个元素作为新字典的键,原键作为对应的值。
举个例子:
原始字典如下:
original_dict = {'author1': ['article001', 'article003'], 'author2': ['article002']}
反转字典的代码非常简洁:
reversed_dict = {item: key for key, items in original_dict.items() for item in items}
执行后得到的结果是:
{'article001': 'author1', 'article003': 'author1', 'article002': 'author2'}
因为所有列表条目都是唯一的,不会出现同一个元素对应多个原键的情况,所以这个方法既高效又安全,完美满足需求。
内容的提问来源于stack exchange,提问作者Spenhouet
相关产品推荐
相关产品推荐

