如何在Python中将一个列表中的值与列表字典中的唯一值进行匹配
因此,我的输入值如下所示:如何在Python中将一个列表中的值与列表字典中的唯一值进行匹配,python,list,dictionary,Python,List,Dictionary,因此,我的输入值如下所示: temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,5], 'C':[6,6,7,8]} temp_dict2 = {} val = [5] 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) 列
temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,5], 'C':[6,6,7,8]}
temp_dict2 = {}
val = [5]
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)
列表val
可能包含更多值,但目前仅包含一个值。我期望的结果是:
>>>temp_dict2
{'B':[5]}
最后一个字典只需要具有包含列表val
中项目的列表的键,并且在列表中只需要该值的唯一实例。我已尝试按如下方式遍历这两个对象:
temp_dict1 = {'A': [1,2,3,4], 'B':[5,5,5], 'C':[6,6,7,8]}
temp_dict2 = {}
val = [5]
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)
但它只返回一个类型为“int”的
参数不可编辑
错误消息。有什么想法吗?更改了词典以涵盖更多案例:
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]}
或者,同样使用列表理解(看起来有点难理解,不推荐)
为了与进行比较,也可以通过集合来实现。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]})
您可以尝试以下方法:
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]}
因为
j
是一个int
并且如果j
中的k试图迭代它。我猜你想在I
上迭代,然后可以删除temp_dict1[I]中j的行。这听起来在概念上不合理:如果5
出现在'B'
和'C'
中,你想要的结果是什么?@MarcusMüller如果temp_dict1如下:temp_dict1={'A':[1,2,3,4,5],'B':[5,5,5],'C':[5,5,6,6,7,8]}
我希望temp_dict2返回:{'A':[5],'B':[5],'C'[5]}
。我知道这可能看起来很奇怪,对于我的任务来说,它会完成工作。好吧,temp_dict
那么如果val=[5,1]
会是什么样子?为什么是列表理解?只需使用字典理解。@BurhanKhalid,因为我使用的是dict.setdefault()
函数,我认为它不能用于字典理解。在文档中,我发现defaultdict
的性能优于setdefault
。但是,defaultdict
需要额外导入。那么,哪一个性能更好呢?老实说,如果您担心导入collections.defaultdict
所需的毫秒数,请不要使用Python编写代码。你说得对,我只是想知道哪一个更好用(将来)。我的建议是遵循文档。虽然我还没有看过C代码优化,但我相信文档会说它是优化的,这是有原因的。