我正在寻找字典理解来执行以下操作:
>>> my_list = [(1,2,3,4),(5,6,7,8)]
>>> new_dict = dict( *python voodoo* )
>>> print new_dict
{(1,2):'item1',(5,6):'item2'}
答案 0 :(得分:1)
您需要以下内容:
d = {x[:2]:'item'+str(i+1) for i, x in enumerate(my_list)}
我将打破这种方式如何运作,以便将来减少“python voodoo”:
首先,我们想要列表中每个元组的前两个值。这是通过列表切片:x[:2]
完成的。这说“给我x
”的前两个值。
其次,利用enumerate
,它可以使用基于0的索引有效地压缩返回值。例如,如果我们在原始列表中调用enumerate
:
>>> for enum in enumerate(my_list):
print(enum)
(0, (1, 2, 3, 4))
(1, (5, 6, 7, 8))
这给了我们一个tuple
,其中索引作为第一个元素,第二个元素列表中的内容。
我们可以通过将两个元素分配给两个值来解包它:
>>> for i, x in enumerate(my_list):
print(str(i) + " : " + str(x))
0 : (1, 2, 3, 4)
1 : (5, 6, 7, 8)
最后,我们需要做的就是将这一切都放入字典理解(这与列表理解非常相似),然后进行一些字符串转换。