无序排列按行聚合的列表字典

2024-04-23 12:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个defaultfict(list)看起来像这样

d = {0: [2, 4, 5], 1: [5, 6, 1]}

我需要将所有列表中的所有第一个元素混合在一起,并将其中一个移动到第二行和第三行。所以在这个例子中,我需要对它们进行[2, 5], [4, 6], [5, 1]洗牌,然后将它们放回原处。最后我的字典可能是这样的

d = {0: [5, 4, 1], 1: [2, 6, 5]}

有没有一个Python的方式来避免循环?你知道吗

到目前为止,我所拥有的是一种提取和聚合列表中所有第一个、第二个等元素的方法,并使用这个

[random.sample([tmp_list[tmp_index] for tmp_list in d.values()], 2) for tmp_index in range(3)]

这将创建以下内容

[[2, 5], [4, 6], [5, 1]]

然后为了创建最终的按行洗牌字典,我使用了简单的for循环。你知道吗


Tags: sample方法in元素列表forindex字典
1条回答
网友
1楼 · 发布于 2024-04-23 12:21:39
  1. 获取dict值的转置版本:

>>> data = [list(v) for v in zip(*d.values())]    
>>> data
[[2, 5], [4, 6], [5, 1]]
  1. 把它们拖到位

>>> for x in data:
...     random.shuffle(x)
...

>>> data
[[5, 2], [4, 6], [5, 1]]
  1. 再次转换数据

>>> data = zip(*data)
  1. 将新值赋给dict

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

相关问题 更多 >