在Python中合并字典

时间:2014-01-02 19:52:05

标签: 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]。

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:6)

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)))

答案 1 :(得分:4)

s = set()
for v in dic.values():
    s = s.union(v.keys())

答案 2 :(得分:4)

如果订单无关紧要:

>>> 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']

答案 3 :(得分:1)

这样的事情:

result = set()
for subdic in dic.values():
  result |= set(subdic.keys())
print result

请注意,这不会保留键的顺序,但是字典键没有定义的顺序以...开头...

答案 4 :(得分:0)

如果您需要内部列表的不同键列表:

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()