Python 使用计数器合并词典

Python 使用计数器合并词典,python,dictionary,merge,Python,Dictionary,Merge,我有以下词典(示例): 我想取每个的键,并使它们成为另一个dict的值,比如说z,这样z的键是一个递增的计数器,等于两个dict的长度 >>> z = {1: 'a', 2: 'b', 3: 'c', 4: 'd'} 正如您所注意到的,z的键是递增计数器,值是x和y的键 我如何做到这一点?我尝试过各种解决方案,也尝试过使用zip,但似乎都不管用。可能是因为我必须连续更新zdict 有什么建议吗 In [1]: import itertools In [2]: x = {'a'

我有以下词典(示例):

我想取每个的
,并使它们成为另一个
dict
的值,比如说
z
,这样
z
是一个递增的计数器,等于两个
dict
的长度

>>> z = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
正如您所注意到的,
z
是递增计数器,
x
y

我如何做到这一点?我尝试过各种解决方案,也尝试过使用
zip
,但似乎都不管用。可能是因为我必须连续更新
z
dict

有什么建议吗

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


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

+1,很漂亮!一个非常优雅的解决方案。我从来没有想过dict(enumerate)
部分。现在它更优雅了;)很好,我完全忽略了
链的部分。注意,dict理解需要Python2.7-在较旧的python版本中,您需要
dict((I+1,k)for…
而不是
{I+1:k for…}
z = set(key for key in itertools.chain(x, 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'}
import itertools as it
{i+1:k for i,k in enumerate(it.chain(x,y))}
# {1: 'a', 2: 'b', 3: 'c', 4: 'd'}