如何将一个列表中的值与Python中列表字典中的唯一值进行匹配

时间:2018-03-18 14:23:22

标签: python list dictionary

所以我的输入值如下:

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错误消息。有什么想法吗?

3 个答案:

答案 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]}