python中来自单个列表的字典

时间:2018-08-31 09:48:03

标签: python python-3.x

我有一个用户定义的列表(因此它不是静态的。例如,假设用户在列表中输入了以下元素)

['sam', '25', 'matt', '30', 'jack', '27']

是否可以将其转换为名称为键,年龄为值的字典?

3 个答案:

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