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

2024-09-29 23:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从一个字典列表中制作一组词典?在

示例:

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

如何从列表data创建一组词典?在

NS:一本字典在结构上是相同的,就等于另一本。也就是说,他们得到了相同的键和值(递归地)


Tags: import示例列表data字典词典v2v1
3条回答

不完全是你要找的东西,因为这也说明了列表,但是:

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

一个廉价的解决方法是将您的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。在

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

您可以使用__hash__方法创建dict子类。确保字典的哈希在集合中时不发生更改(这可能意味着您不能允许修改成员)。 请参见http://code.activestate.com/recipes/414283-frozen-dictionaries/以获取冻结dicts的示例实现。在

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

另请参见https://stackoverflow.com/a/18824158/5069869,以了解不带哈希的集合没有意义的解释。在

相关问题 更多 >

    热门问题