Python 洗牌按行聚合的列表字典
我有一个Python 洗牌按行聚合的列表字典,python,dictionary,defaultdict,Python,Dictionary,Defaultdict,我有一个defaultfict(list)可能是这样的 d={0:[2,4,5],1:[5,6,1]} 我需要将所有列表中的所有第一个元素混合在一起,并将其中一个移动到第二行和第三行。所以在这个例子中,我需要将它们洗牌,然后放回原处。最后我的字典可能是这样的 d={0:[5,4,1],1:[2,6,5]} 有没有一种类似蟒蛇的方法来避免循环 到目前为止,我所拥有的是一种提取和聚合列表中所有第一、第二等元素的方法,并使用此 [random.sample([tmp_list[tmp_index]用于
defaultfict(list)
可能是这样的
d={0:[2,4,5],1:[5,6,1]}
我需要将所有列表中的所有第一个元素混合在一起,并将其中一个移动到第二行和第三行。所以在这个例子中,我需要将它们洗牌,然后放回原处。最后我的字典可能是这样的
d={0:[5,4,1],1:[2,6,5]}
有没有一种类似蟒蛇的方法来避免循环
到目前为止,我所拥有的是一种提取和聚合列表中所有第一、第二等元素的方法,并使用此
[random.sample([tmp_list[tmp_index]用于tmp_list in d.values()],2)用于tmp_index in range(3)]
这将创建以下内容
[[2,5],[4,6],[5,1]
然后为了创建最终的按行洗牌字典,我使用simplefor
循环
>>> data = [list(v) for v in zip(*d.values())]
>>> data
[[2, 5], [4, 6], [5, 1]]
>>> for x in data:
... random.shuffle(x)
...
>>> data
[[5, 2], [4, 6], [5, 1]]
>>> data = zip(*data)
>>> for x, k in zip(data, d):
... d[k][:] = x # Could also be written as d[k] = list(x)
...
>>> d
{0: [5, 4, 5], 1: [2, 6, 1]}