我有一个用户定义的列表(因此它不是静态的。例如,假设用户在列表中输入了以下元素)
['sam', '25', 'matt', '30', 'jack', '27']
是否可以将其转换为名称为键,年龄为值的字典?
答案 0 :(得分:2)
您可以使用zip
创建键值对的tuples
,然后按以下方式将它们键入到dict
中:
>>> my_list = ['sam', '25', 'matt', '30', 'jack', '27']
>>> dict(zip(my_list[::2], my_list[1::2]))
{'matt': '30', 'jack': '27', 'sam': '25'}
或者您可以将词典理解与range
结合使用:
>>> {my_list[i]: my_list[i+1] for i in range(0, len(my_list), 2)}
{'matt': '30', 'jack': '27', 'sam': '25'}
两种解决方案的性能比较:
# Using `zip`
mquadri$ python -m timeit -s "my_list = ['sam', '25', 'matt', '30', 'jack', '27']" "{my_list[i]: my_list[i+1] for i in range(0, len(my_list), 2)}"
1000000 loops, best of 3: 0.872 usec per loop
# Using "dictionary comprehension"
mquadri$ python -m timeit -s "my_list = ['sam', '25', 'matt', '30', 'jack', '27']" "dict(zip(my_list[::2], my_list[1::2]))"
1000000 loops, best of 3: 1.53 usec per loop
答案 1 :(得分:0)
Dict构造函数接受(键,值)元组的可迭代。因此,您只需要一次遍历两个列表
def two_at_time(iterable):
args = [iter(iterable)] * 2
return zip(*args)
lst = ['a', 5, 'b', 6]
my_dict = dict(two_at_time(lst))
答案 2 :(得分:0)
result_dict = {}
for i in range(0,len(a),2):
result_dict[a[i]]=a[i+1]
输出:
{'sam': '25', 'matt': '30', 'jack': '27'}