ch3*_*3rs 1 python merge dictionary key
我正在做一个项目,并且有多个字典,这些字典都由相同的长度组成,也用相同的键填充,每个值都是不同的灰度图片,所以是一个数组。
d1 = {'1' : 'a1' , '2' : 'a2' , '3' : 'a3'}
d2 = {'1' : 'b1' , '2' : 'b2' , '3' : 'b3'}
d3 = {'1' : 'c1' , '2' : 'c2' , '3' : 'c3'}
Run Code Online (Sandbox Code Playgroud)
你知道如何使用这些字典来构建一个包含所有图片的大字典,但键从 1 开始到 n 结束,n 是图片的数量吗?图片的顺序无关紧要。
像这样:
d_new = { ' 1 ' : ' a1 ' , ' 2 ' : ' a2 ' , ' 3 ' : ' a3 ' , ' 4 ' : ' b1 ' , ' 5 ' : ' b2 ' , ' 6 ' : ' b3 ' , ' 7 ' : ' c1 ' , ' 8 ' : ' c2 ' , ' 9 ' : ' c3 ' }
Run Code Online (Sandbox Code Playgroud)
因为键是相同的,所以当我合并它们时,我只会得到一本字典长度的字典。也无法手动更改键的名称,然后合并词典,因为词典的数量取决于用户输入,范围从 1 到 104400 个创建的词典。
我还尝试使用嵌套字典,在尝试访问图片时出现“不可哈希”错误。
我想念的问题有简单的解决方案吗?
提前致谢 :)。
干杯
编辑:谢谢你们,你们的大部分解决方案都像魅力一样工作:)
靠的力量itertools!
使用字符串键:
>>> from itertools import chain, count
>>> dicts = [d1, d2, d3]
>>> dict(zip(map(str, count(1)), chain.from_iterable((d.values() for d in dicts))))
{'1': 'a1', '2': 'a2', '3': 'a3', '4': 'b1', '5': 'b2', '6': 'b3', '7': 'c1', '8': 'c2', '9': 'c3'}
Run Code Online (Sandbox Code Playgroud)
使用 int 键:
>>> dict(zip(count(1), chain.from_iterable((d.values() for d in dicts))))
{1: 'a1', 2: 'a2', 3: 'a3', 4: 'b1', 5: 'b2', 6: 'b3', 7: 'c1', 8: 'c2', 9: 'c3'}
Run Code Online (Sandbox Code Playgroud)
尽管后者有点毫无意义,因为您可以只使用一个从零开始索引的列表。
请记住,您需要 Python 3.7 或更高版本才能确定有序的字典。