如何将两个复杂字典转换为{ {...}, {...} }格式的结构?
问题解答
首先明确:在Python里,直接用{ {...}, {...} }这种集合形式存储字典是不可行的。
原因很简单:Python要求集合的元素必须是**可哈希(hashable)**的类型,而字典是可变类型(可随时修改键值对),属于不可哈希对象,直接把字典放进集合会抛出TypeError: unhashable type: 'dict'的错误。
替代方案
1. 仅需类似集合的显示效果
如果只是想要输出成{ {...}, {...} }的格式,可以手动格式化字符串:
all = [lis1, lis2] # 格式化输出 print("{" + ", ".join(str(d) for d in all) + "}")
运行后会输出你想要的格式,但实际存储的还是列表结构。
2. 需要集合的特性(比如去重)
可以把字典转换成可哈希的类型,比如将字典的键值对转成排序后的元组(排序是为了保证相同内容的字典能转成一致的元组),再放进集合:
# 字典转成可哈希的元组 tuple1 = tuple(sorted(lis1.items())) tuple2 = tuple(sorted(lis2.items())) # 存入集合 dict_set = {tuple1, tuple2} # 还原成字典 for t in dict_set: print(dict(t))
3. 常规存储需求
如果只是需要存储多个字典并支持访问,继续用列表是最合理的选择。列表支持索引访问(all[0]取第一个字典,all[1]取第二个),也支持增删改操作,是Python中存储多个字典的常规方式。
另外纠正你代码里的笔误:你定义的变量是lis1和lis2,但append时写的是list1和liste2,实际运行会报错,要改成all.append(lis1)和all.append(lis2)。
内容的提问来源于stack exchange,提问作者Pathia Nanto
相关产品推荐
相关产品推荐

