我的问题可能有点奇怪,但我不知道怎么说。情况是我有一个以元组为键的字典:
{(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'}
我现在想要得到dict中元组中所有值的列表(或元组)。所以结果应该是这样的:
[1, 2, 3, 4, 5, 6]
有人知道如何以高效和pythonic的方式做到这一点吗?
欢迎所有提示!
[编辑] 看到我通过一些额外的问题得到了很多回复:
我不关心订单,但应删除可能的重复项。
答案 0 :(得分:6)
将键链接在一起,例如列表推导:
[v for key in yourdict for v in key]
如果您只需要迭代,使用itertools.chain.from_iterable()
可以执行:
from itertools import chain
for v in chain.from_iterable(yourdict):
字典没有排序,因此键中的值也不会以任何特定顺序排列(尽管每个键的2个值保持连续)。您始终可以使用以下方式对其进行排序:
sorted(v for key in yourdict for v in key)
或
sorted(chain.from_iterable(yourdict))
如果您不关心订单但不想复制,那么会生成一组:
{v for key in yourdict for v in key}
演示:
>>> yourdict = {(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'}
>>> [v for key in yourdict for v in key]
[1, 2, 5, 6, 3, 4]
>>> from itertools import chain
>>> list(chain.from_iterable(yourdict))
[1, 2, 5, 6, 3, 4]
>>> sorted(v for key in yourdict for v in key)
[1, 2, 3, 4, 5, 6]
>>> sorted(chain.from_iterable(yourdict))
[1, 2, 3, 4, 5, 6]
制作一套:
>>> anotherdict = {(1, 2): 'a', (3, 4): 'b', (4, 2): 'c'}
>>> {v for key in yourdict for v in key}
set([1, 2, 3, 4, 5, 6])
>>> {v for key in anotherdict for v in key}
set([1, 2, 3, 4])
答案 1 :(得分:2)
既然你提到订单无关紧要
d = {(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'}
set().union(*d.viewkeys())
set([1, 2, 3, 4, 5, 6])