这是个典型的倒排索引问题,相关概念可以参考 陈运文:搜索引擎之倒排索引解读
d = { "植物": ["榕树", "杨树", "橡树"], "动物": ["兔子", "老虎", "大象"] } pairs = sum([[[item, cate] for item in items] for cate, items in d.items()], []) # [ # ['榕树', '植物'], # ['杨树', '植物'], # ['橡树', '植物'], # ['兔子', '动物'], # ['老虎', '动物'], # ['大象', '动物'] # ] items = [pair[0] for pair in pairs] # ['榕树', '杨树', '橡树', '兔子', '老虎', '大象'] cates = [pair[1] for pair in pairs] # ['植物', '植物', '植物', '动物', '动物', '动物'] inverted_index = dict(pairs) # { # '榕树': '植物', # '杨树': '植物', # '橡树': '植物', # '兔子': '动物', # '老虎': '动物', # '大象': '动物' # }
注:这里的代码主要用到了列表推导式,比如pairs那一行,用嵌套的列表推导式
[[[item, cate] for item in items] for cate, items in d.items()] # [ # [ # ['榕树', '植物'], # ['杨树', '植物'], # ['橡树', '植物'] # ], # [ # ['兔子', '动物'], # ['老虎', '动物'], # ['大象', '动物'] # ] # ]
然后使用sum(·, [])的方式将其展平。这两步等价于使用循环嵌套
tmp = [] for cate, items in d.items(): for item in items: tmp.append([item, cate])
这里只是抛砖引玉,等价的代码太多了,可以选用自己喜欢的风格。