使用两个列表中的随机元素创建一个字典列表 - python

时间:2013-08-09 17:13:13

标签: python list random dictionary

在python中是否有办法在列表中的两个列表之间执行随机化并返回一个字典?

例如,来自:

[[1,2,3,4], ['a','b','c','d']]

为:

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

实现这一目标的最佳方法是什么?使用列表理解?我的两个列表实际上非常大,所以我想知道是否有更有效的替代方案。

2 个答案:

答案 0 :(得分:4)

import random
keys, values = [[1,2,3,4], ['a','b','c','d']]
random.shuffle(values)
result =  [{k:v} for k, v in zip(keys, values)]

生成一个列表,例如:

In [7]: result
Out[7]: [{1: 'd'}, {2: 'b'}, {3: 'c'}, {4: 'a'}]

更节省内存的替代方法是使用迭代器:

import itertools as IT
result = ({k:v} for k, v in IT.izip(keys, values))

更大的问题是为什么你需要一系列微小的决定。有一个dict,如Steven Rumbalski的回答所产生的那个,这不是更有用吗?

或者,如果你真的只想要一个随机配对,也许元组的迭代器就足够了:

result = IT.izip(keys, values)

答案 1 :(得分:2)

这会根据您的问题请求创建单个字典而不是单个项目字典列表。如果您真的想要,请使用unutbu's answer

import random

a = [1,2,3,4]
b = ['a','b','c','d']

random.shuffle(a)
result = dict(zip(a, b))

如果你不能改变你的源列表:

dx = range(len(a))
random.shuffle(dx)
dict(zip((a[i] for i in dx), b))