我想通过映射中央字典中的2个列表而不使用循环来创建2个字典。
输入字典:
edict_all = { 1:[[23,20]], 2:[[45,45]], 3:[[56,43]], 4:[[66,23]], 5:[[24,23]], 9:[[57,78]], 8:[[67,76]], 51:[[242,223]]}
我有2个列表:
list_a = [1,4,8,9,51]
list_b = [1,2,3,5,9]
当前,我正在使用2个循环:
edict_a, edict_b = dict(), dict()
for i in list_a:
edict_a[i] = edict_all[i]
for i in list_b:
edict_b[i] = edict_all[i]
输出为:
edict_a = {1: [[23, 20]], 4: [[66, 23]], 8: [[67, 76]], 9: [[57, 78]], 51: [[242, 223]]}
edict_b = {1: [[23, 20]], 2: [[45, 45]], 3: [[56, 43]], 5: [[24, 23]], 9: [[57, 78]]}
答案 0 :(得分:1)
这里不可避免地要出现循环,但是您可以使用zip
和operator.itemgetter
隐藏它们:
from operator import itemgetter
edict_a = dict(zip(list_a, itemgetter(*list_a)(edict_all)))
edict_b = dict(zip(list_b, itemgetter(*list_b)(edict_all)))
答案 1 :(得分:0)
您可以使用Python generator expression过滤数据,然后将其传递回dict()
构造函数:
edict_a = dict((key, value) for key, value in edict_all.items() if key in list_a)
edict_b = dict((key, value) for key, value in edict_all.items() if key in list_b)
是的,任何形式的循环都是不可避免的。至少您可以将其写成一行。