如何从OrderedDict获得一个子集?



我在Python中有一个OrderedDict,我只想获得第一个键值对。如何得到它?例如,为了获得前4个元素,我做了以下操作:

subdict = {}
for index, pair in enumerate(my_ordered_dict.items()):
if index < 4:
subdict[pair[0]] = pair[1]

这是一个好方法吗?

这种方法涉及遍历整个字典(即使您只需要前四个元素),反复检查索引,手动解包对,并手动执行不必要的索引检查。

使其短路很容易:

subdict = {}
for index, pair in enumerate(my_ordered_dict.items()):
if index >= 4:
break  # Ends the loop without iterating all of my_ordered_dict
subdict[pair[0]] = pair[1]

,您可以嵌套解包以获得更好的名称:

subdict = {}
# Inner parentheses mandatory for nested unpacking
for index, (key, val) in enumerate(my_ordered_dict.items()):
if index >= 4:
break  # Ends the loop
subdict[key] = value

,但是你可以用itertools.islice来改进它,删除手动索引检查:

from itertools import islice  # At top of file
subdict = {}
# islice lazily produces the first four pairs then stops for you
for key, val in islice(my_ordered_dict.items(), 4):
subdict[key] = value

此时,您实际上可以一行完成整个操作(因为现在您有了一个包含您想要的四对的可迭代对象,并且dict构造函数接受对的可迭代对象):

subdict = dict(islice(my_ordered_dict.items(), 4))

您可以使用像这样的map函数

item = dict(map(lambda x: (x, subdict[x]),[*subdict][:4]))

有一种方法:

sub_dict = dict(pair for i, pair in zip(range(4), my_ordered_dict.items()))

zip(a,b)的长度等于ab中最短的长度,所以如果my_ordered_dict.items()4长,zip(range(4), my_ordered_dict.items()只取4的前一个项目。这些键值对被传递给dict,生成一个新的dict

最新更新