我想把这些结合起来:
keys = ['name', 'age', 'food']
values = ['Monty', 42, 'spam']
在单个词典中:
{'name': 'Monty', 'age': 42, 'food': 'spam'}
我想把这些结合起来:
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 = {}
for i in range(len(keys)):
dict[keys[i]] = values[i]
print(dict)
{'name': 'Monty', 'age': 42, 'food': 'spam'}
虽然有多种方法可以做到这一点,但我认为最基本的方法是:;创建一个循环和字典,并将值存储到该字典中。在递归方法中,想法仍然是一样的,但函数调用自己直到到达终点,而不是使用循环。当然,还有其他方法,如使用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'}
对于那些需要简单代码但不熟悉zip的人:
List1 = ['This', 'is', 'a', 'list']
List2 = ['Put', 'this', 'into', 'dictionary']
这可以通过一行代码完成:
d = {List1[n]: List2[n] for n in range(len(List1))}
如果在创建字典之前需要转换键或值,那么可以使用生成器表达式。例子:
>>> adict = dict((str(k), v) for k, v in zip(['a', 1, 'b'], [2, 'c', 3]))
看一看《像蟒蛇一样的代码:惯用Python》。
用枚举法作为词典理解的解决方案:
dict = {item : values[index] for index, item in enumerate(keys)}
使用enumerate的循环的解决方案:
dict = {}
for index, item in enumerate(keys):
dict[item] = values[index]