无序地对字典列表进行洗牌

4

我在Stack Overflow上看到一个类似的问题,涉及到一个字典列表(标题不太好),当我尝试按照那个答案使用random.shuffle在我的字典列表上时,它使整个对象变成了None类型。

我有一个类似于这样的字典列表:

[
{'a':'1211', 'b':'1111121','c':'23423'},
{'a':'101', 'b':'2319','c':'03431'},
{'a':'3472', 'b':'38297','c':'13048132'}
]

我想要像这样随机洗牌。
[
{'a':'3472', 'b':'38297','c':'13048132'},
{'a':'1211', 'b':'1111121','c':'23423'},
{'a':'101', 'b':'2319','c':'03431'}   
]

我该如何做到这一点?


random.shuffle 应该可以工作。不确定为什么它会给你一个 None 类型的对象。 - RobertR
如果您想要随机打乱一个列表的元素,无论其是什么,请使用 random.shuffle。否则,请定义您对随机打乱的理解。请注意,random.shuffle 会修改 原始列表。使用方式为: my_list = [...]; random.shuffle(my_list); print(my_list) - Bakuriu
6
random.shuffle 会就地随机打乱列表并返回 None。你可能错误地使用了 x = random.shuffle(x),正确应该是不进行赋值的 random.shuffle(x) - Steven Rumbalski
请查看@StevenRumbalski的回复! - Brian
你们都是完全正确的 :) 请不要点踩,Python文档中没有指定它返回一个NoneType对象,这是一个真正愚蠢的错误,我认为其他人会从中受益。 - Dhruv Ghulati
@DhruvGhulati:有趣。在线文档说“就地打乱序列x。”他们没有提到返回类型,但在Python中,改变方法和函数的约定是返回None。奇怪的是,如果你在解释器中键入help(random.shuffle),你会得到“就地打乱列表x;返回None。” - Steven Rumbalski
1个回答

13

random.shuffle 应该能工作。我认为你认为它会给你一个 None 类型的对象的原因是你在做类似这样的事情

x = random.shuffle(...)

但是random.shuffle不返回任何东西,它会在原地修改列表

x = [{'a':'3472', 'b':'38297','c':'13048132'},
     {'a':'1211', 'b':'1111121','c':'23423'},
     {'a':'101', 'b':'2319','c':'03431'}]
random.shuffle(x)  # No assignment
print(x)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接