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