2024-09-26 22:49:41 发布
网友
假设我有以下字典和清单:
my_dictionary = {1:"hello", 2:"goodbye", 3:"World", "sand":"box"} my_list = [1,2,3]
有没有一种直接的(Pythonic)方法可以按照列表顺序定义的顺序从字典中获取键-值对,对于字典,键是列表中的元素?
简单的方法是遍历列表并逐个提取映射中的值,但我想知道python是否具有字典列表切片的等效功能。
这个怎么样?获取my_list中的每个项,并将其传递给字典的get方法。它还通过用None替换缺少的键来处理异常。
my_list
get
None
map(my_dictionary.get, my_list)
如果你想要元组zip它-
zip
zip(my_list, map(my_dictionary.get, my_list))
如果需要新的dict,请将tuple传递给dict
dict(zip(my_list, map(my_dictionary.get, my_list)))
>>> zip(my_list, operator.itemgetter(*my_list)(my_dictionary)) [(1, 'hello'), (2, 'goodbye'), (3, 'World')]
不知道Python是否足够,但这是有效的:
res = [(x, my_dictionary[x]) for x in my_list]
这是一个list comprehension,但是,如果只需要迭代该列表一次,还可以将其转换为生成器表达式,例如:
for el in ((x, my_dictionary[x]) for x in my_list): print el
当然,只有当列表中的所有元素都存在于字典中时,前面的方法才起作用;要解释键不存在的情况,可以执行以下操作:
res = [(x, my_dictionary[x]) for x in my_list if x in my_dictionary]
这个怎么样?获取
my_list
中的每个项,并将其传递给字典的get
方法。它还通过用None
替换缺少的键来处理异常。如果你想要元组
zip
它-如果需要新的dict,请将tuple传递给dict
不知道Python是否足够,但这是有效的:
这是一个list comprehension,但是,如果只需要迭代该列表一次,还可以将其转换为生成器表达式,例如:
当然,只有当列表中的所有元素都存在于字典中时,前面的方法才起作用;要解释键不存在的情况,可以执行以下操作:
相关问题 更多 >
编程相关推荐