在字典值中访问嵌套的tupels

时间:2016-01-20 19:44:59

标签: python dictionary

我在与此主题相关的许多现有问题中找不到答案后发布此问题 我有一本类似于这一本的词典:

foo = {'a': [(1, 0.5), (2, 0.3)], 'b': [(3, 0.4), (4, 0.1)]}

并且想要访问嵌套tupels的项目,以便从中创建以下字典:

foo = {'a': [1, 2], 'b': [3, 4]}

我该怎样做,最好以pythonic方式?

5 个答案:

答案 0 :(得分:1)

我认为这两种解决方案最容易阅读:

>>> from operator import itemgetter
>>> {k:map(itemgetter(0), foo[k]) for k in foo}
{'a': [1, 2], 'b': [3, 4]}

或无进口:

>>> {k:[x[0] for x in foo[k]] for k in foo}
{'a': [1, 2], 'b': [3, 4]}

答案 1 :(得分:0)

怎么样?

{x: map(lambda z: z[0], y) for x, y in foo.iteritems()}

答案 2 :(得分:0)

使用dict comprehension

In [214]: {key:list(map(lambda x: x[0], foo[key])) for key in foo}
Out[214]: {'a': [1, 2], 'b': [3, 4]}

答案 3 :(得分:0)

{k:list(zip(x,y)[0]) for k,(x,y) in foo.iteritems()}

这给出了:

{'a': [1, 2], 'b': [3, 4]}

答案 4 :(得分:0)

您可以使用collections模块中的defaultdict执行此操作:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d = defaultdict(list)
>>> for k in foo:
        for v in foo[k]:
            d[k].append(v[0])
>>> d
defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3, 4]})
>>> d['a']
[1, 2]
相关问题