我有这样的字典
dic={10:(1,4),20:(2,4),30:(3,4)}
如何在不使用1,2,3
循环的情况下使用dic.values()
将for
作为输出。
答案 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())