按键和值组合多个词典?

时间:2016-11-20 23:41:34

标签: python dictionary merge combiners

下班后和其他帖子的建议,我无法解决我的问题。 我必须管理很多词典(直到现在我知道工作的唯一方式)。

对于我想要组合的所有四个词典,其中三个具有相同的键(d1,d2和d3)。

d1 = {key1: [x1, x2, x3], key2: [y1, y2, y3], key3: [z1, z2, z3]}
d2 = {key1: [x4, x5, x6],key2: [y4, y5, y6], key3: [z4, z5, z6]}
d3 = {key1: [x7, x8, x9], key2: [y7, y8, y9], key3: [z7, z8, z9]}
d4 = {x2: [a, b, c], y2: [d, e, f], z2: [g, h, i]}

第四个字典是由包含元数据的参考文件生成的字典,它们的键等于d1中的一个值,我想要的是创建一个包含来自d1, d2和{的信息的字典{1}}之后在最终词典中包含d3的信息。

d4

并以表格格式打印:

final_dict = {key1: [x1, a, b, x2, x3, x4, x5, x8, x9],
              key2: [y1, d, e, y2, y3, y4, y5, y8, y9],
              key3: [z1, g, h, z2, z3, z4, z5, z8, z9]}

目前我有一个肮脏的剧本,但"工作"。

key1  x1  a  b  x2  x3  x4  x5  x8  x9
key2  y1  d  e  y2  y3  y4  y5  y8  y9
key3  z1  g  h  z2  z3  z4  z5  z8  z9

问题是最后3行。

由于缺乏深刻的知识,我们将非常感谢简单的建议(对于傻瓜)。

1 个答案:

答案 0 :(得分:1)

我认为这是您正在寻找的内容,尽管有关{?1}},x6x7y6等变量的逻辑。被排除在外还不清楚:

首先,让这些变量(例如y7x1等)存在,并将其自己的名称指定为其值的字符串,以便以后更轻松地跟踪结果:

x2

接下来,让我们实例化你的词典:

values = [letter + str(number) for letter in 'xyz' for number in range(1, 10)] + ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
for v in values:
    exec('%s = "%s"' % (v, v))

然后,让我们将词典合并成一个大的,最终的d1 = {key1: [x1, x2, x3], key2: [y1, y2, y3], key3: [z1, z2, z3]} d2 = {key1: [x4, x5, x6],key2: [y4, y5, y6], key3: [z4, z5, z6]} d3 = {key1: [x7, x8, x9], key2: [y7, y8, y9], key3: [z7, z8, z9]} d4 = {x2: [a, b, c], y2: [d, e, f], z2: [g, h, i]}

dict

最后,为了获得new_dict = {} for d in [d1, d2, d3]: for key in d: if key not in new_dict: # if key not yet in the dict, make it so new_dict[key] = d[key] else: # if key already there, then we'll just add the lists together new_dict[key] += d[key] 的前两个字母,我们可以试试这个:

d4

检查输出:

for key in new_dict:
    for other_key in d4:
        if other_key in new_dict[key]:
            new_dict[key] += d4[other_key][:2]

这基本上是你想要的结果,除了它包括6和7&#39。你能提供一些背景知道为什么你想要的输出看起来那样吗?无论如何,这应该让你开始。