Python 旧字典中的新字典,将特定值与适当的键组合在一起

Python 旧字典中的新字典,将特定值与适当的键组合在一起,python,dictionary,Python,Dictionary,在本例中,我有一本字典,其形式如下: d = {1: {'z': 1, 'x': 11, 'y': 101}, 2: {'z': 2, 'x': 12, 'y': 102}, 3: {'z': 3, 'x': 13, 'y': 103}} new_dict = {12: {'p':(z1 + z2)}, 13: {'p':(z1 + z3)}, 23: {'p':(z2 + z3}}} 注:在realty中,z、x和y的整数

在本例中,我有一本字典,其形式如下:

d = {1: {'z': 1, 'x': 11, 'y': 101},
     2: {'z': 2, 'x': 12, 'y': 102},
     3: {'z': 3, 'x': 13, 'y': 103}}
new_dict = {12: {'p':(z1 + z2)},
            13: {'p':(z1 + z3)},
            23: {'p':(z2 + z3}}}
注:在realty中,
z
x
y
的整数值是列表或数组

其目的是(可能与itertools一起)组合所有
z
值,并形成以下形式的新词典:

d = {1: {'z': 1, 'x': 11, 'y': 101},
     2: {'z': 2, 'x': 12, 'y': 102},
     3: {'z': 3, 'x': 13, 'y': 103}}
new_dict = {12: {'p':(z1 + z2)},
            13: {'p':(z1 + z3)},
            23: {'p':(z2 + z3}}}
这里,
z1
对应于具有值
z
的子字典
1
z2
对应于具有值
z
的子字典
2
z3
对应于具有值
z
的子字典
3


我的尝试: 我的想法基于提取值以首先形成一个列表。然后,我可以从这个列表中形成组合
c
,并用它们填充一个新字典

# form list of values.
new_dict = {}
new_list = []
for k in d:
    new_list.append(d[k]['z'])

# populate new dictionary.
for n, c in enumerate(itertools.combinations(new_list, 2)):
    new_dict[n] = sum(c)
这给了我:

new_dict = {0: 3, 1: 4, 2: 5}
然后我想重命名这些键(
mydict[new\u key]=mydict.pop(old\u key)
)以对应于适当的组合。为了以后添加新信息,我还需要将信息保存为子字典

final_dict = {12: {'p':3}, 
              13: {'p':4},
              23: {'p':5}}
这样我就可以很容易地跟踪信息的来源,然后在组合中添加新的日期。我不确定如何以迭代的方式来反映数据的来源,或者这是否是最快/最简单的路线

注意:我无法在或中找到答案。尽管它们确实提供了想法。

您可以使用它们来实现您的目标:

from itertools import combinations

d = {1: {'z': 1, 'x': 11, 'y': 101},
     2: {'z': 2, 'x': 12, 'y': 102},
     3: {'z': 3, 'x': 13, 'y': 103}}

new_dict = {}
for d1, d2 in combinations(d, 2):
    new_dict[int(str(d1) + str(d2))] = {'p': d[d1]['z'] + d[d2]['z']}

print(new_dict)

我在代码中看到一个bug。您能修复示例
d
?语法错误@再见,谢谢-应该修好了。