假设我在Python3.x中有以下简单词典:
example = {1:[4, 5, 6], 2:[7, 8, 9]}
我想用以下方法扩充词典:
expanded_example = {1:[4, 5, 6], 2:[7, 8, 9], 4:[5, 6], 5:[4, 6], 6:[4, 5], 7:[8, 9], 8:[7, 9], 9:[7, 8]}
由于多个键共享值,这变得相当复杂。举个例子,
example2 = {1:[4, 5, 6], 2:[4, 7, 8, 9]}
这里4是与1和2相关联的列表中的值。
如果存在“重复”值元素,有两种方法:
{1:[4, 5, 6], 2:[4, 7, 8, 9], 4:[5, 6], 5:[4, 6], 6:[4, 5], 7:[8, 9], 8:[7, 9], 9:[7, 8]}
(2) 保留所有关联的值(因为“4”在键“1”和“2”之间共享):
{1:[4, 5, 6], 2:[4, 7, 8, 9], 4:[5, 6, 7, 8, 9], 5:[4, 6], 6:[4, 5], 7:[4, 8, 9], 8:[4, 7, 9], 9:[4, 7, 8]}
编辑时间:
collections.defaultdict
:
from collections import defaultdict
dict1 = {1:[4, 5, 6], 2:[4, 7, 8, 9]}
d_dict = defaultdict(list)
for k,l in dict1.items():
for v in l:
d_dict[v].append(l)
print(d_dict)
## defaultdict(<class 'list'>, {4: [[4, 5, 6], [4, 7, 8, 9]], 5: [[4, 5, 6]], 6: [[4, 5, 6]], 7: [[4, 7, 8, 9]], 8: [[4, 7, 8, 9]], 9: [[4, 7, 8, 9]]})
这让我明白了一些方法,但是列表中有重复的元素。。。