Python - How to merge two lists into a dictionary in a total random order
我见过这样的例子:如何将两个列表合并成一个字典,使用一个列表的元素作为键,另一个列表的元素作为值。唯一的问题(最好说是限制)是两个列表的大小必须相等才能实现这一点。
假设我有两个列表,如下所示:
1 2 | A = ['SW1', 'SW2', 'SW3', 'SW4'] B = ['N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'N7'] |
我要查找的结果必须是这两个列表的联合字典,以总的随机顺序,甚至每个键的值的数目!(每执行一次程序时可能会有所不同)。
例如,第一次跑步时,我会随机得到如下信息:
1 | Run1 = {"SW1":["N1"],"SW2":["N2","N3"],"SW3":["N4"],"SW4":["N5","N6","N7"] } |
在将来的运行中,它可能/应该显示第二个列表元素的不同顺序/编号/分配,作为从第一个列表中获取的每个键的值。这怎么可能?
下面是一种随机化所有内容的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import random A = ['SW1', 'SW2', 'SW3', 'SW4'] B = ['N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'N7'] def randomize_to_dictionary(a, b): copy_a = a[:] copy_b = b[:] random.shuffle(copy_a) random.shuffle(copy_b) length_a = len(copy_a) length_b = len(copy_b) dictionary = {} start = 0 for index, key in enumerate(copy_a): end = -1 if index < length_a - 1: end = random.randint(start + 1, length_b - (length_a - index)) dictionary[key] = copy_b[start:end] start = end return dictionary print(randomize_to_dictionary(A, B)) |
上面假设len(b)>=len(a)。如果使用此代码,则应将其作为显式测试。
实例
1 2 3 4 5 6 7 | % python3 test.py {'SW4': ['N7', 'N2', 'N3'], 'SW2': ['N5'], 'SW1': ['N1'], 'SW3': ['N4']} % python3 test.py {'SW3': ['N4', 'N5'], 'SW4': ['N1'], 'SW2': ['N3', 'N6'], 'SW1': ['N2']} % python3 test.py {'SW1': ['N4'], 'SW3': ['N3'], 'SW2': ['N7', 'N6', 'N5'], 'SW4': ['N2']} % |
这里有一个方法你可以采取。
创建一个字典,将EDOCX1的每个元素(0)映射到一个空列表。
对于