使用计数器
合并字典我有以下的字典(例如):使用计数器
>>> x = {'a': 'foo', 'b': 'foobar'}
>>> y = {'c': 'barfoo', 'd': 'bar'}
我想利用每个keys
,使他们的另一个dict
价值,说z
,使得z
的keys
是递增的计数器,等于dicts
的长度。
>>> z = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
正如你所看到的z
的keys
是一个递增的计数器和values
是x
和y
的keys
。
我该如何做到这一点?我尝试了各种解决方案,并与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'}
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 +中是新的。
不错,我完全忽略了“连锁”部分。 – user225312 2011-04-24 21:11:50
请注意,字典的理解需要python 2.7 - 在较老的python版本中,您需要'dict((i + 1,k)...)'而不是'{i + 1:k for ...}' – ThiefMaster 2011-04-24 21:15:59
+1,漂亮!非常优雅的解决方案。我从来没有想过“字典(枚举)”的一部分。 – user225312 2011-04-24 21:09:24
现在它更优雅;) – ThiefMaster 2011-04-24 21:10:59
+1:比我快得多。 – bernie 2011-04-24 21:11:36