Python 将词典列表转换为一组词典

Python 将词典列表转换为一组词典,python,dictionary,Python,Dictionary,如何从一个词典列表中生成一组词典 例如: import copy v1 = {'k01': 'v01', 'k02': {'k03': 'v03', 'k04': {'k05': 'v05'}}} v2 = {'k11': 'v11', 'k12': {'k13': 'v13', 'k14': {'k15': 'v15'}}} data = [] N = 5 for i in range(N): data.append(copy.deepcopy(v1)) data.appe

如何从一个词典列表中生成一组词典

例如:

import copy

v1 = {'k01': 'v01', 'k02': {'k03': 'v03', 'k04': {'k05': 'v05'}}}
v2 = {'k11': 'v11', 'k12': {'k13': 'v13', 'k14': {'k15': 'v15'}}}

data = []
N = 5
for i in range(N):
    data.append(copy.deepcopy(v1))
    data.append(copy.deepcopy(v2))

print data
如何从列表
数据
创建一组词典


NS:当一本词典的结构相同时,它们就等同于另一本词典。这意味着,它们得到了完全相同的键和值(递归)

字典是可变的,因此在python中不可散列

您可以使用
\uuuuuu散列法
方法创建dict子类。确保字典的哈希在集合中时不会更改(这可能意味着您不允许修改成员)。 有关frozendicts的示例实现,请参见

如果可以在(冻结的)词典上定义排序顺序,也可以使用基于二叉树而不是集合的数据结构。这归结为下面链接中提供的对分解决方案


另请参阅,以了解为什么没有散列的集合没有意义。

一个廉价的解决方法是序列化DICT,例如:

import json

dset = set()

d1 = {'a':1, 'b':{'c':2}}
d2 = {'b':{'c':2}, 'a':1} # the same according to your definition
d3 = {'x': 42}

dset.add(json.dumps(d1, sort_keys=True))
dset.add(json.dumps(d2, sort_keys=True))
dset.add(json.dumps(d3, sort_keys=True))

for p in dset:
    print json.loads(p) 

从长远来看,将整件事情封装在一个类中是有意义的,比如
SetOfDicts

不完全是您想要的,因为这也说明了列表,但是:

def hashable_structure(structure):
    if isinstance(structure, dict):
        return {k: hashable_structure(v) for k, v in structure.items()}
    elif isinstance(structure, list):
        return {hashable_structure(elem) for elem in structure)}
    else:
        return structure

您需要的元组输出是什么?
data=set(data)
?@ForceBru
TypeError:unhable type:'dict'
该包提供了不可变和可散列的Frozendict,因此您可以创建一组Frozendict。您需要Frozendict的Frozendict。好的,您已经指出了一些众所周知的东西,你的问题是什么?你为什么想要一套?是否只想删除重复项?您想使用set操作吗?@BPL如果您已经知道
dict
不可
散列
,那么您的问题就没有意义了。那么,您如何制作一套
指令?您可以在dict中设置一组
,在dict中设置
,或者在dict中同时设置
键和
键,但不能单独设置一个!我还并没有找到任何反例,它似乎可以工作,甚至当关键是洗牌的深层次dictionaries@BPL:当然,这只在DICT(和所有子元素)可序列化的情况下有效。公平地说,我可以接受;)