使用计数器合并字典

时间:2011-04-24 20:59:25

标签: python dictionary merge

我有以下词典(示例):

>>> x = {'a': 'foo', 'b': 'foobar'}
>>> y = {'c': 'barfoo', 'd': 'bar'}

我想取每个keys并将其设为另一个dict的值,比如说z,这样keys的{​​{1}}就是z递增的计数器,等于dicts的长度。

>>> z = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

您可以注意到,keys z是递增的计数器,valueskeys xy

我如何实现这一目标?我尝试了各种解决方案并使用zip,但似乎都没有效果。可能是因为我必须连续更新z字典。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

In [1]: import itertools
In [2]: x = {'a': 'foo', 'b': 'foobar'}
In [3]: y = {'c': 'barfoo', 'd': 'bar'}

In [4]: z = [key for key in itertools.chain(x, y)]

In [5]: z
Out[5]: ['a', 'b', 'c', 'd']

In [6]: dict(enumerate(z))
Out[6]: {0: 'a', 1: 'b', 2: 'c', 3: 'd'}

In [7]: dict(enumerate(z, 1))
Out[7]: {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

如果您希望重复键只出现一次,请将[4]替换为:

z = set(key for key in itertools.chain(x, y))

请注意,您也可以同时执行所有操作(对于此示例,我已将'a': 'meow'添加到y):

In [15]: dict(enumerate(set(key for key in itertools.chain(x, y)), 1))
Out[15]: {1: 'a', 2: 'c', 3: 'b', 4: 'd'}

In [16]: dict(enumerate((key for key in itertools.chain(x, y)), 1))
Out[16]: {1: 'a', 2: 'b', 3: 'a', 4: 'c', 5: 'd'}

答案 1 :(得分:4)

import itertools as it
{i+1:k for i,k in enumerate(it.chain(x,y))}
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}

请注意,dict-(和相关的set-)理解是v2.7 +中的新内容。