我想把这些结合起来:

keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam']

在单个词典中:

{'name': 'Monty', 'age': 42, 'food': 'spam'}

当前回答

如果在创建字典之前需要转换键或值,那么可以使用生成器表达式。例子:

>>> adict = dict((str(k), v) for k, v in zip(['a', 1, 'b'], [2, 'c', 3])) 

看一看《像蟒蛇一样的代码:惯用Python》。

其他回答

更自然的方法是使用词典理解

keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')    
dict = {keys[i]: values[i] for i in range(len(keys))}

用枚举法作为词典理解的解决方案:

dict = {item : values[index] for index, item in enumerate(keys)}

使用enumerate的循环的解决方案:

dict = {}
for index, item in enumerate(keys):
    dict[item] = values[index]

如果在创建字典之前需要转换键或值,那么可以使用生成器表达式。例子:

>>> adict = dict((str(k), v) for k, v in zip(['a', 1, 'b'], [2, 'c', 3])) 

看一看《像蟒蛇一样的代码:惯用Python》。

虽然有多种方法可以做到这一点,但我认为最基本的方法是:;创建一个循环和字典,并将值存储到该字典中。在递归方法中,想法仍然是一样的,但函数调用自己直到到达终点,而不是使用循环。当然,还有其他方法,如使用dict(zip(key,value))等。这些不是最有效的解决方案。

y = [1,2,3,4]
x = ["a","b","c","d"]

# This below is a brute force method
obj = {}
for i in range(len(y)):
    obj[y[i]] = x[i]
print(obj)

# Recursive approach 
obj = {}
def map_two_lists(a,b,j=0):
    if j < len(a):
        obj[b[j]] = a[j]
        j +=1
        map_two_lists(a, b, j)
        return obj
      


res = map_two_lists(x,y)
print(res)

两个结果都应打印

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}  

如果您使用的值超过1组,并且希望有一个字典列表,则可以使用此选项:

def as_dict_list(data: list, columns: list):
    return [dict((zip(columns, row))) for row in data]

实际示例是来自数据库查询的元组列表,与来自同一查询的列元组配对。其他答案仅为1比1。