Python中的合并词典
嗨,我想合并一些词典Python中的合并词典,python,merge,Python,Merge,嗨,我想合并一些词典 dic= { 'a' : {'x':1,'y':1,'z':1}, 'b' : {'q':1,'w':1,'z':1}, 'c' : {'x':1,'f':1,'z':1}, 'd' : {'x':1,'m':1,'r':1} } 结果应该是这样的[x,y,z,q,w,f,m,r] 这里有人能帮我吗?像这样的: s = set() for v in dic.values(): s = s.union(v.keys()) result = set()
dic=
{
'a' : {'x':1,'y':1,'z':1},
'b' : {'q':1,'w':1,'z':1},
'c' : {'x':1,'f':1,'z':1},
'd' : {'x':1,'m':1,'r':1}
}
结果应该是这样的[x,y,z,q,w,f,m,r]
这里有人能帮我吗?像这样的:
s = set()
for v in dic.values():
s = s.union(v.keys())
result = set()
for subdic in dic.values():
result |= set(subdic.keys())
print result
?
请注意,这不会保留键的顺序,但是字典键没有定义的开始顺序
answer = list(set(itertools.chain.from_iterable(dic.itervalues())))
如果要忽略某些键:
blacklist = set('a b'.split())
answer = list(set(itertools.chain.from_iterable(v for k,v in dic.iteritems if k not in blacklist)))
如果顺序不重要:
>>> dic = {'a': {'y': 1, 'x': 1, 'z': 1}, 'c': {'x': 1, 'z': 1, 'f': 1}, 'b': {'q': 1, 'z': 1, 'w': 1}, 'd': {'x': 1, 'r': 1, 'm': 1}}
>>> set().union(*dic.values())
set(['q', 'r', 'w', 'f', 'y', 'x', 'z', 'm'])
如果像顺序这样的事情确实重要,我们可以使用排序顺序和第一次出现:
>>> from collections import OrderedDict
>>> OrderedDict.fromkeys(v for k in sorted(dic) for v in sorted(dic[k])).keys()
['x', 'y', 'z', 'q', 'w', 'f', 'm', 'r']
如果需要内部列表的不同键的列表:
import collections
dic = {
'a' : {'x':1,'y':1,'z':1},
'b' : {'q':1,'w':1,'z':1},
'c' : {'x':1,'f':1,'z':1},
'd' : {'x':1,'m':1,'r':1}
}
a = collections.Counter([v for d in dic.values() for v in d])
l = a.keys()
请准确定义结果的外观。脚本输出什么?它与您期望的有何不同?似乎他只需要内部字典的键。它不应该是union吗?(+1)我已经冒昧地修复了方法名(
intersection
->union
)。非常感谢。不需要订货,很漂亮。第一次很好地使用“from_iterable”,我明白了。太棒了。有没有一种方法可以在没有口述“a”的情况下获得这个列表?西蒙:检查一下更新(+1)是否漂亮(我认为顺序并不重要,因为原始字典没有定义的顺序)。是的,将所有内容传递给单个联合调用要比通过N-1调用减少简单得多。