Python - 如何以完全随机顺序将两个列表合并到字典中

时间:2016-10-28 04:38:19

标签: python list dictionary

我已经看过像this这样的例子,关于如何将两个列表合并为一个字典,使用一个列表的元素作为键,另一个作为值。唯一的问题(更好地说限制)是两个列表的大小需要相等才能实现这一目标。

我们说我有两个列表如下:

A = ['SW1', 'SW2', 'SW3', 'SW4']
B = ['N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'N7']

我要查找的结果必须是按随机顺序排列的这两个列表的联合字典,甚至是每个键的值的数量! (每次执行程序时可能会有所不同。)

e.g。在第一次运行时,我随机得到这样的东西:

Run1 = {"SW1":["N1"], "SW2":["N2","N3"], "SW3":["N4"], "SW4":["N5", "N6", "N7"] }

并且在将来运行时它可能/应该显示第二列表元素的不同顺序/数字/分配作为从第一列表获取的每个键的值。这怎么可能?

2 个答案:

答案 0 :(得分:1)

这是你可以采取的一种方法。

  1. 创建一个字典,将A的每个元素映射到一个空列表。

  2. 对于b的每个元素B,随机选择A的元素并将b追加到词典中的相应列表。您可以使用random.choice()进行随机选择。

答案 1 :(得分:1)

这是一种随机化一切的方法:

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)&gt; = len(A)。如果您使用此代码,则应该进行显式测试。

<强>实施例

% 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']}
%