Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的合并词典_Python_Merge - Fatal编程技术网

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调用
减少
简单得多。