我已经看过像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"] }
并且在将来运行时它可能/应该显示第二列表元素的不同顺序/数字/分配作为从第一列表获取的每个键的值。这怎么可能?
答案 0 :(得分:1)
这是你可以采取的一种方法。
创建一个字典,将A
的每个元素映射到一个空列表。
对于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']}
%