假设有三个列表:
val = [1 2 2 3 5 5 5 6 8]
m = ['m2' 'm1' 'm2' 'm2' 'm1' 'm2' 'm2' 'm1' 'm1']
v = ['v9' 'v3' 'v7' 'v5' 'v1' 'v6' 'v8' 'v2' 'v4']
我正在尝试创建一个嵌套字典,其中val中的每个元素都用作一阶键。m中的元素应描述二阶键。你知道吗
我已经知道如何用
d = {}
for x, y, z in zip(val, m, v):
d.setdefault(x,{})[y] = []
这将创建以下结构
{1: {'m2': []}, 2: {'m2': [], 'm1': []}, 3: {'m2': []}, 5: {'m2': [], 'm1': []}, 6: {'m1': []}, 8: {'m1': []}}
如果我在z后面加上
d.setdefault(x,{})[y].append(z)
我明白了
{1: {'m2': ['v9']}, 2: {'m2': ['v7'], 'm1': ['v3']}, 3: {'m2': ['v5']}, 5: {'m2': ['v8'], 'm1': ['v1']}, 6: {'m1': ['v2']}, 8: {'m1': ['v4']}}
我还知道如何创建一个字典,将v的元素分配给相应的一阶键(即val的元素)
for elem in range(len(val)):
if val[elem] not in d:
d[val[elem]] = []
d[val[elem]].append(v[elem])
导致
{1: ['v9'], 2: ['v3', 'v7'], 3: ['v5'], 5: ['v1', 'v6', 'v8'], 6: ['v2'], 8: ['v4']}
但是,我看不到获得所需输出的最后一步:
{1: {'m2': ['v9']}, 2: {'m2': ['v7'], 'm1': ['v3']}, 3: {'m2': ['v5']}, 5: {'m2': ['v6', 'v8'], 'm1': ['v1']}, 6: {'m1': ['v2']}, 8: {'m1': ['v4']}}
(具有键“5”和二阶键“m2”的子字典中缺少元素“v6”(即5:{m2':['v8']})
尝试使用defaultdict
使用
itertools.groupby
和zip
进行嵌套字典理解。你知道吗示例:
相关问题 更多 >
编程相关推荐