从字典中的多个值中获取单个值

时间:2013-12-02 17:00:32

标签: python

我有这样的字典

dic={10:(1,4),20:(2,4),30:(3,4)}

如何在不使用1,2,3循环的情况下使用dic.values()for作为输出。

5 个答案:

答案 0 :(得分:5)

这有效:

>>> dic={10:(1,4),20:(2,4),30:(3,4)}
>>> [x[0] for x in dic.values()]
[1, 2, 3]
>>> # Or if you want that as a tuple
>>> tuple(x[0] for x in dic.values())
(1, 2, 3)
>>> # Or a string
>>> ",".join([str(x[0]) for x in dic.values()])
'1,2,3'
>>>

你应该记住,但字典的顺序并不能保证。意思是,键/值对并不总是与你放入的顺序相同。

要按照您想要的顺序获得无序结果,您应该查看sorted

答案 1 :(得分:2)

如果你看看dic.values()产生了什么:

>>> dic={10:(1,4),20:(2,4),30:(3,4)}
>>> dic.values()
[(1, 4), (2, 4), (3, 4)]

显然你想要每个元组的第一个元素。

您可以使用zip获取该内容而无需循环 1

>>> zip(*dic.values())[0]
(1, 2, 3)

正如评论中所指出的,更有效的解决方案是:

>>> from itertools import izip
>>> next(izip(*dic.itervalues()))
(1, 2, 3)

然后你不必为了得到第一个元素而创建几个列表。

顺序当然取决于dic中键的顺序。

1 '没有循环'是一个愚蠢的区别恕我直言。每个解决方案都有一个显式或隐式循环...

答案 2 :(得分:1)

答案:你不能。你必须遍历字典:

for v in d.values():
    print v[0]

或使用列表理解:

[v[0] for v in d.values()]

这种过滤方法是您能找到的最佳方法:)

答案 3 :(得分:0)

这个解决方案并没有比使用迭代器更好,但它有不同的方法,可能更适合复杂的任务:

from operator import itemgetter
dic={10:(1,4),20:(2,4),30:(3,4)}
print map(itemgetter(0), dic.values())

给出:

[1, 2, 3]

答案 4 :(得分:0)

如何在这里使用地图。

map(lambda x: x[0], dic.values())