在本例中,我有一本字典,其形式如下:
d = {1: {'z': 1, 'x': 11, 'y': 101},
2: {'z': 2, 'x': 12, 'y': 102},
3: {'z': 3, 'x': 13, 'y': 103}}
注:在realty中,z
、x
和y
的整数值是列表或数组。
其目的是(可能与itertools一起)组合所有z
值,并形成以下形式的新词典:
new_dict = {12: {'p':(z1 + z2)},
13: {'p':(z1 + z3)},
23: {'p':(z2 + z3}}}
这里,z1
对应于子字典1
with valuez
,z2
对应于子字典2
with valuez
,z3
对应于子字典3
带值z
。
我的尝试:我的想法基于提取值以首先形成一个列表。然后,我可以从这个列表中形成组合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_key]=mydict.pop(old_key)
)以对应于适当的组合。为了以后追加新信息,我还需要将信息保存为子字典。
final_dict = {12: {'p':3},
13: {'p':4},
23: {'p':5}}
这是这样,我可以很容易地跟踪信息来自哪里,并在以后将新日期附加到该组合中。我不确定我将如何以迭代的方式来反映数据来自哪里,或者这是否是最快/最简单的路线。
注意:关于如何从Python或Python中的dict列表中的值生成所有组合,我找不到答案:dict理解:使用旧字典ID中的新值创建新字典。尽管他们提供了一些想法。
您可以使用itertools。实现目标的组合
:
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)
{12: {'p': 3}, 13: {'p': 4}, 23: {'p': 5}}
问题内容: 我有以下字典 我想获取字典列表中每个字典值“ KA20”和“ KA23”的键“ tmst”的总和。 您能对此提出建议吗? 问题答案: 您可以使用: 请注意,要正常工作,必须按分组键进行排序:
问题内容: 我有以下格式的词典列表: 我想将此字典列表分组为一个字典,例如: 我目前所做的是,遍历所有字典并创建键列表,然后再次遍历该键以创建。我想知道是否有更简单的方法来完成此任务。有人可以帮忙吗? 问题答案: 谷歌的事情: python列表理解 python dict理解 蟒蛇星 python dict获取 python设置联合
问题内容: 我有这样的词典列表: 我想采用这些并构建一个像这样的大词典: 我有什么优雅的“拉链”式方法吗? 所有的键总是一样的。 问题答案: 或者,通过dict理解:
问题内容: 这可能是一个愚蠢的问题,但是考虑到以下指示: 我将如何获得此列表: 换句话说,我希望字典中两个键/值对的所有组合都不能替换,而与顺序无关。 问题答案: 一种解决方案是使用: 编辑 :由于受欢迎的需求,这里是Python 3.x版本:
问题内容: 我有一本代表书店的字典。键代表书名,值代表当前书的份数。从商店出售书籍时,书籍的份数必须减少。 我已经编写了减少售书数量的代码,但是在更新后打印字典时,我得到的是初始字典,而不是更新的字典。 我想以最简单的方式解决问题。我是否错过了代码中的任何逻辑或任何行? 问题答案: 好吧,您可以仅通过引用键直接从值中减去。我认为这更简单。 在您的情况下:
问题内容: 我收到一个字典作为输入,并想返回一个字典,其键将是输入的值,而其值将是对应的输入键。价值观是独一无二的。 例如,说我的输入是: 我希望我的输出是: 为了澄清,我希望我的结果等于以下内容: 有什么精巧的Pythonic方式可以做到这一点? 问题答案: Python 2: Python 3(感谢@erik):