是否可以根据键列表在Python中获取字典的有序"切片"?

mer*_*011 8 python

假设我有以下字典和列表:

my_dictionary = {1:"hello", 2:"goodbye", 3:"World", "sand":"box"}
my_list = [1,2,3]
Run Code Online (Sandbox Code Playgroud)

是否有直接(Pythonic)方法从列表顺序定义的顺序中获取键是列表中元素的字典中的键值对?

天真的方法只是迭代列表并逐个拉出地图中的值,但我想知道python是否具有相似的字典列表切片.

dig*_*All 9

不知道pythonic是否足够但这是有效的:

res = [(x, my_dictionary[x]) for x in my_list]
Run Code Online (Sandbox Code Playgroud)

这是一个列表理解,但是,如果您只需要迭代该列表一次,您还可以将其转换为生成器表达式,例如:

for el in ((x, my_dictionary[x]) for x in my_list):
    print el
Run Code Online (Sandbox Code Playgroud)

当然,只有当列表中的所有元素都存在于字典中时,前面的方法才有效.为了解释密钥不存在的情况,你可以这样做:

res = [(x, my_dictionary[x]) for x in my_list if x in my_dictionary]
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

>>> zip(my_list, operator.itemgetter(*my_list)(my_dictionary))
[(1, 'hello'), (2, 'goodbye'), (3, 'World')]
Run Code Online (Sandbox Code Playgroud)