我有两个列表,需要将键合并为一个字典,键是字母,值是另一个列表中的值。 例如:
map_keys_to_values_list(["a", "b", "a"], [15, 3, 6])
会给我:
{'a': [15, 6], 'b': [3]}
我试过了:
def keys_to_values_list(k_lst, v_lst):
lst = []
for i in range(len(k_lst)):
v=[]
#v.append(v_lst[i])
t = (k_lst[i],v)
lst.append(t)
my_dict = dict(lst)
for k in my_dict.keys():
val = my_dict.get(k)
for m in range(len(k_lst)):
val.append(v_lst[m])
return my_dict
但我获得了值列表中的所有值
答案 0 :(得分:4)
您可以使用collections.defaultdict
将默认工厂作为list
传递,以收集属于同一角色的所有值:
from collections import defaultdict
def map_keys_to_values_list(keys, values):
d = defaultdict(list)
for k, v in zip(keys, values):
d[k].append(v)
d.default_factory = None
return d
在构建dict之后,您可以将dict的default_factory
设置为None
,这样进一步的密钥访问不会产生缺失密钥的新列表,而是会提升更合适的KeyError
>>> d = map_keys_to_values_list(["a", "b", "a"], [15, 3, 6])
>>> d
defaultdict(None, {'a': [15, 6], 'b': [3]})
>>> d['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
。 1}}:
{{1}}
答案 1 :(得分:2)
def keys_to_values_list(keys, values):
d = dict()
for i in range(len(keys)):
if keys[i] in d:
d[keys[i]].append(values[i])
else:
d[keys[i]] = [values[i]]
return d
答案 2 :(得分:0)
尝试这个:
def mapKeysToValues(keyList, valueList):
return {k : [value for index, value in enumerate(valueList) if keyList[index]==k] for k in keyList}
keyList = ["a", "b", "a"]
valueList = [15, 3, 6]
print(mapKeysToValues(keyList, valueList))
输出:
{'a': [15, 6], 'b': [3]}