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
?语法错误@再见,谢谢-应该修好了。