我有以下词典(示例):
>>> 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
是递增的计数器,values
是keys
x
和y
我如何实现这一目标?我尝试了各种解决方案并使用zip
,但似乎都没有效果。可能是因为我必须连续更新z
字典。
有什么建议吗?
答案 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 +中的新内容。