[英]python get dictionary key from value is list
我有两本字典:
first_dict = {'a': ['1', '2', '3'],
'b': ['4', '5'],
'c': ['6'],
}
second_dict = {'1': 'wqeewe',
'2': 'efsafa',
'4': 'fsasaf',
'6': 'kgoeew',
'7': 'fkowew'
}
我想要第三个字典,它将包含 second_dict 的键及其来自 first_dict 键的相应值。 这样,我将拥有:
third_dict = {'1' : 'a',
'2' : 'a',
'4' : 'b',
'6' : 'c',
'7' : None,
}
这是我的方式:
def key_return(name):
for key, value in first_dict.items():
if name == value:
return key
if isinstance(value, list) and name in value:
return key
return None
但是,我想知道另一种使用 dict.get() 或其他方法的方法。 任何帮助,将不胜感激。 谢谢。
你可以这样做:
first_dict = {'a': ['1', '2', '3'],
'b': ['4', '5'],
'c': ['6'],
}
second_dict = {'1': 'wqeewe',
'2': 'efsafa',
'4': 'fsasaf',
'6': 'kgoeew',
'7': 'fkowew'
}
third_dict = dict()
for second_key in second_dict.keys():
found = False
for first_key, value in first_dict.items():
if second_key in value:
third_dict.setdefault(second_key, first_key )
found = True
if not found:
third_dict.setdefault(second_key, None)
print(third_dict)
{'1': 'a', '2': 'a', '4': 'b', '6': 'c', '7': None}
希望这可以帮助
带有a_dict.get()
的版本
third_dict = {i: {i:k for k,v in first_dict.items() for i in v}.get(i) for i in second_dict.keys()}
这部分{i:k for k,v in first_dict.items() for i in v}
创建一个像{'1': 'a', '2': 'a', '3': 'a', '4': 'b', '5': 'b', '6': 'c'}
您可以 map 第一个字典中的值到它们的键:
values_map = dict([a for k, v in first_dict.items() for a in zip(v, k*len(v))])
然后使用这个 map 创建第三个字典:
third_dict = {key: values_map.get(key) for key, value in second_dict.items()}
由于我知道 first_dict 可能包含单个值而不是列表,因此您可能希望首先将这些值转换为列表:
first_dict = dict(map(lambda x: (x[0], x[1]) if isinstance(x[1], list) else (x[0], [str(x[1])]), first_dict.items()))
res = {
x: k
for k, xs in first_dict.items()
for x in xs
if x in second_dict
}
这会创建1:a, 2:a, 4:b
等。如果您还想缺少像7:None
这样的键,请使用虚拟字典加入它:
res = {k: None for k in second_dict} | {
x: k
for k, xs in first_dict.items()
for x in xs
if x in second_dict
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.