所以我的输入值如下:
temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,5], 'C':[6,6,7,8]}
temp_dict2 = {}
val = [5]
列表val
可能包含更多值,但目前只包含一个值。我期望的结果是:
>>>temp_dict2
{'B':[5]}
最终字典只需要包含列表val
中包含该项的列表的键,并且列表中只包含该值的唯一实例。我尝试按如下方式迭代这两个对象:
for i in temp_dict1:
for j in temp_dict1[i]:
for k in val:
if k in j:
temp_dict2.setdefault(i, []).append(k)
但这只会返回argument of type 'int' is not iterable
错误消息。有什么想法吗?
答案 0 :(得分:1)
更改了字典以涵盖更多案例:
temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,6], 'C':[6,6,7,8]}
temp_dict2 = {}
val = [5, 6]
for item in val:
for key, val in temp_dict1.items():
if item in val:
temp_dict2.setdefault(key, []).append(item)
print(temp_dict2)
# {'B': [5, 6], 'C': [6]}
或者,使用列表理解相同(看起来有点难以理解,不推荐)。
temp_dict2 = {}
[temp_dict2.setdefault(key, []).append(item) for item in val for key, val in temp_dict1.items() if item in val]
答案 1 :(得分:1)
与@KeyurPotdar's solution进行比较,也可以通过collections.defaultdict
:
from collections import defaultdict
temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,6], 'C':[6,6,7,8]}
temp_dict2 = defaultdict(list)
val = [5, 6]
for i in val:
for k, v in temp_dict1.items():
if i in v:
temp_dict2[k].append(i)
# defaultdict(list, {'B': [5, 6], 'C': [6]})
答案 2 :(得分:0)
您可以尝试这种方法:
temp_dict1 = {'A': [1,2,3,4,5,6], 'B':[5,5,5], 'C':[6,6,7,8]}
val = [5,6]
def values(dict_,val_):
default_dict={}
for i in val_:
for k,m in dict_.items():
if i in m:
if k not in default_dict:
default_dict[k]=[i]
else:
default_dict[k].append(i)
return default_dict
print(values(temp_dict1,val))
输出:
{'B': [5], 'C': [6], 'A': [5, 6]}