如何在python中使用词典结合其他列表中项目的所有值?

时间:2017-11-18 09:08:14

标签: python dictionary

我有两个列表,需要将键合并为一个字典,键是字母,值是另一个列表中的值。 例如:

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

但我获得了值列表中的所有值

3 个答案:

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