从Python中的列表元素创建字典

2024-04-24 11:53:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的清单如下:

my_list =
    [(1, 'item_19'),
     (2, 'item_20'),
     (3, 'item_21'),
     (4, 'item_22'),
     (5, 'item_23'),
     (6, 'item_24'),
     (7, 'item_25'),
     (8, 'item_26'),
     (9, 'item_27'),
     (10, 'item_28'),
     (11, 'item_29'),
     (12, 'item_30'),
     (13, 'item_31'),
     (14, 'item_32'),
     (15, 'item_33'),
     (16, 'item_34'),
     (17, 'item_35')]

我想为列表中的每个元素编一个字典,即1:'item_19',2:'item_20'

我现在这样做:

list_1 = [l[0] for l in my_list]
list_2 = [l[1] for l in my_list] 

然后把这两张单子压缩

my_dict = dict(zip(list_1,list_2))

然而,在my_list中有超过一百万个元素,所以这是最好的方法,还是有更快/更优化的方法(内存方面)。你知道吗

为了将其放到上下文中,我需要一个查找表来检查my_dict中的元素是否已经存在于另一个字典my_dict_old


Tags: 方法内存in元素列表for字典my
2条回答

dict接受元组列表,因此您可以只使用原始列表:

my_dict = dict(my_list)

实际上,您在调用zip时也在做同样的事情

另外,如果所有的键都是数字,并且不是很大,那么您可以将它们全部放入数组中。索引将是关键。尽管此解决方案取决于实际任务,在某些情况下可能没有用处

内置的dict函数接受元组列表,这正是您所提供的:

>>> list_foo = [(1, 'item_1'), (2, 'item_2')]
>>> dict(list_foo)
{1: 'item_1', 2: 'item_2'}

如果您只需要检查项目是否存在,请考虑使用set,因为i in my_seti in my_dict.values()see the Python documentation on performance要快得多,以获取更多信息。例如,在我的机器上,在一个包含10k条目的大草堆中查找是.443sdict.values(),而不是<.000sset。如果需要将值与条目相关联,则使用字典,否则使用集合。要更深入地研究列表与字典(以及大多数情况下的集合),请参阅this answer。你知道吗

相关问题 更多 >