使用计数器

问题描述:

合并字典我有以下的字典(例如):使用计数器

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

我想利用每个keys,使他们的另一个dict价值,说z,使得zkeys是递增的计数器,等于dicts的长度。

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

正如你所看到的zkeys是一个递增的计数器和valuesxykeys

我该如何做到这一点?我尝试了各种解决方案,并与zip玩,但似乎没有工作。可能是因为我必须连续更新z字典。

有什么建议吗?

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'} 
+0

+1,漂亮!非常优雅的解决方案。我从来没有想过“字典(枚举)”的一部分。 – user225312 2011-04-24 21:09:24

+0

现在它更优雅;) – ThiefMaster 2011-04-24 21:10:59

+0

+1:比我快得多。 – bernie 2011-04-24 21:11:36

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-(和RELAT编辑 - )理解在v2.7 +中是新的。

+0

不错,我完全忽略了“连锁”部分。 – user225312 2011-04-24 21:11:50

+0

请注意,字典的理解需要python 2.7 - 在较老的python版本中,您需要'dict((i + 1,k)...)'而不是'{i + 1:k for ...}' – ThiefMaster 2011-04-24 21:15:59